les derniers
articles

Index &
Sommaire
 

Articles « Info » : architecture

 


DÉCOLLAGE !


Présentation du
site WEB AILES
 


AF (Architecture Fonctionnelle)

[Architecture]
[RDFranceTelecom], [BAF99]


    Si la notion générale d'architecture a été définie et même complétée par un framework, l'article sur l'architecture et les points de vues a introduit 2 notions plus familières : l'architecture fonctionnelle et l'architecture technique.
    Cet article revient sur le premier des 2 points de vues majeurs : l'architecture fonctionnelle.
    L'article :
- revient sur la définition de ce point de vue majeur ;
- rejette une première représentation trop souvent aperçue sous le label "architecture fonctionnelle" ;
- détaille l'organisation des composants fonctionnels qui la composent ;
- se conclut par un bref aperçu de ses axes d'évolution.

Rappel :
- les éléments participant à la
définition de l'architecture restent représentées en jaune sur fond rouge ;
- les
enjeux architecturaux en vert sur fond rouge ;
- les
caractéristiques de bases de l'architecture sont en bleue sur fond vert.


 



Lisez-moi et
réagissez !



Écrivez à AILES !



Retour vers le sommaire Architecture
 
Rappels
    Le terme "Fonctionnelle" de l'AF désigne un des 2 points de vues majeurs de l'Architecture.
On se souviendra que le "point de vue", tel que présenté dans caractéristiques de bases : Vues, désigne la modélisation d'une ou plusieurs structure, chaque structure est un composant particulier représentant une partition d'éléments appartenant à un même domaine.
    Bon ok, je donne un exemple :
    Dans l'article sur les points de vue des architectures, le point de vue majeur "Fonctionnel" est décomposé en 4 vues : fonctionnelle, logicielle, structurelle et logique.
    Ainsi, par exemple, la vue logique a-t-elle comme composant particulier des structures composées de classes logiques (éléments concrets d'architecture appartenant au même domaine d'architecture "Classe"). Le diagramme UML associé est celui, bien connu, du diagramme de classe. Vous trouverez d'autres exemples dans l'article sur les caractéristiques de bases de l'architecture, notamment avec le point de vue "Cas d'Utilisation" ("Use Case").
    En examinant les 4 vues déjà citées comme constituant l'AF, on peut en déduire que celle-ci spécifie les besoins fonctionnels de l'utilisateur (vue fonctionnelle, Use Case), en en décrivant la dynamique (vue logicielle, diagramme de séquence), favorisant la décomposition du système logiciel en sous-systèmes lors de l'analyse (vue structurelle, diagramme de classe), afin d'aller jusqu'à la modélisation de ce système sous forme de classes (vue logique, diagrammes de classe et d'objet).
    Toutefois, la granularité retenue au niveau de l'AF est rarement la classe, instrument de modélisation trop fin. Il faut ici introduire la notion de "composant", sous-entendu "composant fonctionnel métier", sachant qu'un composant de ce type rempli toujours 2 contrats : 
- un contrat technique qui supporte l'exécution de la fonction métier du composant (avec, par exemple, la notion de "nommage" ou "désignation" qui permet de le retrouver via un serveur de composant) ; 
- et un contrat fonctionnel, qui permet de délivrer le service métier au travers d'une interface (on détaillera la partie technique dans un prochain article sur la populaire "approche composant", mais il sera également présenté dans un futur article sur l'Architecture Technique).
    Ce composant particulier (puisque composant "fonctionnel métier"), comme tous les composants, est composé d'éléments d'au moins 2 types :
1/ des classes (dont une est une interface), ce qui donne la modélisation classique du composant en UML :
- un package représentant le composant, et contenant
- une interface, classe publique qui exporte les services du composant ;
- une classe d'implémentation interne au package, qui peut se servir d'une ou plusieurs classes privées.

2/ des éléments techniques (process, main, librairies,...) qui supportent l'exécution du service métier en lui garantissant persistance, distribution, sécurité, etc... ces éléments font parti du Composant Technique, tel que présenté dans l'article sur l'Architecture Technique.

Ce qui suit utilise donc la notion de composant au sens métier du terme et ne parle que de son contrat fonctionnel, sans aborder son contrat technique.

Ce que n'est pas l'AF

    On trouve souvent l'une de ces 2 présentations en tant que "architecture fonctionnelle".


schéma a


schéma b

    Il s'agit plutôt de considérations technico-fonctionnelles, dont on verra une présentation beaucoup plus détaillée dans l'article illustrant la "projection" qui existe entre architecture fonctionnelle et technique. On trouvera un exemple d'une telle "architecture" soit disant fonctionnelle dans l'exemple illustrant le passage de l'AF vers l'AT. Cet exemple utilise, comme dans les schémas a et b, des composants (tels que modélisés en UML) ci-dessus, mais on peut voir ce type d'architecture "pseudo-fonctionnelle" avec d'autres types d'éléments (comme des composants techniques, justement, pour représenter des accesseurs de données).
     Ce type d'architecture est à mi-chemin avec une architecture applicative. En effet, dans une architecture applicative, on ne retrouve pas de composant fonctionnel métier, mais bien des composants techniques.
     Le niveau "Données" représente les bases de données et les fichiers du Système d'Information.
    Le niveau "Application" représentent tous les traitements réalisés sur les données :
- lorsqu'il est seul (schéma a), il est caractéristique d'environnement de développement de type VisualBasic. Les traitements fonctionnels (règles de gestions) sont fortement imbriqués avec les traitements de présentation. En plus des problèmes de déploiement et d'évolutivité que cela entraîne, ce niveau est trop peu structurant : il ne distingue pas entre ce qui est générique et réutilisable dans une application et ce qui ne l'est pas ;
- cette dernière remarque reste vrai dans le schéma b, où la présentation est - heureusement - découplée de l'application.
    Si l'on se concentre sur la notion de "composant" (délivrant un service au sens fonctionnel du terme), il ne faudrait pas y inclure dans l'architecture fonctionnelle des services génériques participant à l'infrastructure technique d'exécution de ces mêmes composants, comme la persistance ou la gestion de la transaction, ou encore le caractère distribué d'un composant, sa sécurité, etc. Comme l'article sur le passage de l'AF vers l'AT le détaillera, ces services-là font parti du contrat technique que doit remplir le composant. Or seul son aspect "métier" (fonctionnel) nous intéresse ici, comme précisé au début de cet article. Et la présentation soit-disant "fonctionnelle" de cette architecture telle que présentée ci-dessus ne manque pas de faire intervenir ces composants techniques, notamment pour l'accès aux données.
    Ces deux aspects (peu structurant et composants techniques) contredisent la qualité fonctionnelle que l'on veut prêter à ce découpage. On lui préférera l'organisation à 3 niveaux présentée dans le paragraphe suivant.

Une architecture fonctionnelle à 3 niveaux
    Le schéma suivant présente une première structuration des composants fonctionnels qui composent toute application.


+ une description de la dynamique d'enchaînement des composants
(diagrammes de séquence et/ou d'états) 

    Le niveau présentation correspond bien sûr à l'affichage, la gestion des interactions et de la mise en forme des informations en provenance et/ou à destinations de l'application. Ce niveau correspond aussi à de nombreux services génériques pérennes, comme de nombreux composants dédiés à l'affichage (d'une date, d'une somme, etc...), mais aussi l'activation ou l'interruption d'une commande de l'application ("valider", "annulez", ...).
    Un niveau "Métier" qui regroupe les composants génériques des différents domaines de l'entreprise. On retrouve les composants généraux partageables par plusieurs sous-systèmes du système d'information global : des composants de types "entités" ou "ressource" (par exemple les objets "Client", "Employé", "Commande", ...)et des composants de type "processus" ("PriseDeCommande") qui mettent en jeu plusieurs entités.
    Le niveau "Application" regroupe les composants non génériques, soit les composants associés à des besoins applicatifs non-généralisables au niveau de l'entreprise, en particulier les composants de contrôle qui gèrent les interactions entre la "Présentation" et le "Métier", ce qui constitue toute la "logique applicative".
    Face à un tel modèle, 2 remarques s'imposent :
    1/ On notera que ces composants se modélisent naturellement en utilisant un paradigme objet, exposant ses services via son interface, son mécanisme interne étant encapsulé dans son package, comme cela est représenté dans le premier schéma de l'article, en notation UML. Pourtant, rien n'empêche son implémentation dans des langages non-objets comme le COBOL (très courant!).
    2/ Ce découpage en trois niveaux peut rappeler le paradigme "MVC" (Model-View-Controler ou Modèle-Vue-Contrôleur).
Toutefois, en MVC, la partie "Présentation" n'a pas accès à la partie Modèle, afin de pouvoir faire évoluer cette dernière indépendamment de la première (et inversement).
Or la répartition des composants en 3 niveaux "Présentation-Application-Métier" est plus souple. En particulier, les composants génériques réutilisables de la couche "Métier" sont justement conçus pour être stables (leur interface n'évolue pas, même si le mécanisme interne peut subir d'importantes évolutions). Donc ces composants peuvent très bien être utilisés sans risque majeur par la couche "Présentation".
(Concrètement, c'est ce qui se passe lorsque, dans l'architecture J2EE, la page jsp "Présentation" récupère le composant "Client" de la couche "Métier" pour en afficher le nom, tout cela via une servlet et certains beans java applicatifs qui ont mis le-dit composant métier "Client" dans l'objet "Session" ou "Request").

La nécessaire évolution des architectures fonctionnelles
    Le réseau était, avant Internet, peu facile à développer et à mettre en relation avec d'autre réseaux. Il en a résulté :
- une sédimentation des couches fonctionnelles développées (par exemple, chaque type de produits différents vendu par une entreprise a son propre système de prise de commande et de livraison) ;
- une adhérence géographique (par exemple, chaque région a son propre système de gestion des clients, ce qui est plus facile que de tout centraliser tout le temps) ;
- une dispersion et émiettement fonctionnel, une redondance des données (ce qui est la conséquence directe des 2 premiers. Les données se trouvent dupliquées, avec tous les risques d'incohérence et de déphasage que cela comporte).
    Aujourd'hui, on raisonne plus en terme de composant représentant des "services immatériels" (donc le plus souvent des logiciels ou encore un enchaînement "d'appels de services"), ce qui estompe la traditionnelle frontière entre réseau et le système logiciel considéré (le réseau tend à être de plus en plus masqué : on "accède à un service", peut importe qu'il soit distant ou non).
    De plus, les données et leur descriptions associées (méta-données) sont moins redondantes (donc moins nombreuses, mieux gérées, supervisées et structurées), remises à jour beaucoup plus régulièrement et masquées aux utilisateurs (là encore, on accède plus à un service qu'à une donnée).
    L'architecture fonctionnelle passe de plus en plus par une urbanisation indispensable, à savoir :
- identifier les données et leurs services associés ;
- associer l'ensemble des processus de gestions associé au système dans lequel ce composant évolue (workflow, data-mining, SI, etc...), afin d'en constituer une véritable cartographie (où le composant intervient-il et dans quel processus ?). Le composant "Client" d'une société peut en effet se retrouver impliqué dans un grand nombre de processus... avec des risques de redondances et d'incohérences déjà évoqués.



               
 
Avertissement !
 
Décollage !  |  Présentation du site web "AILES"  | 
Infos générales  |  articles "Informatique"