Appliquer une architecture métier dans un projet logiciel consiste à regrouper au sein de packages, de dossiers, des classes d'objets et de collections correspondant aux entités (par exemple des produits, des personnes, des elements abstraits...) issues directement des besoins fonctionnels. Les attributs de ces classes contiennent les données propres que doit traiter le système. Les méthodes correspondent aux différentes fonctionnalités associées à l'entité représentée par la classe.
Le principe de conception repose sur l'idée qu'une entité sera manipulée souvent de la même façon en différents emplacements du projet: en créant une classe dédiée à cette entité, on centralise les traitements et on les rend plus faciles à comprendre.
L'utilisation d'une architecture métier au sein d'un projet logiciel répond à un besoin de factorisation et de différenciation du code, apportant un niveau d'abstraction supplémentaire.
Factorisation: on place le code correspondant à un traitement fonctionnel dans une méthode de l'objet métier, et on utilise cette méthode en divers emplacements du projet. Lorsque le code correspondant à ce traitement fonctionnel doit être modifié, la modification ne concerne donc qu'un seul emplacement.
Différenciation: en regroupant toutes les méthodes métier dans un package spécifique, les développeurs savent instantanément où les retrouver et comment les exploiter.
Abstraction: lors de l'élaboration des schémas mentaux nécessaires au développement d'améliorations ou à la maintenance, le développeur qui a l'habitude d'utiliser l'architecture métier sait qu'il peut 'attaquer' le projet par les classes métier.
Mise en oeuvre: on créera une classe correspondant à l'entité métier qui doit être représentée et une classe collection manipulant des listes d'objets de la classe métier.
Exemple de mise en oeuvre d'une architecture métier:
Dans une bibliothèque municipale, un système informatique est développé pour assurer la gestion des abonnés, les commandes de livres, les stocks, les réservations, les emprunts. Ce système informatique est multi-utilisateurs et possède deux types d'accès: un accès public sur internet, permettant aux abonnés de consulter les livres en ligne, de connaitre en temps réel leur disponibilité et de réserver. Un accès de type privilégié, utilisé par les bibliothèquaires à l'accueil de la bibliothèque, autorisant l'accès à des fonctionnalités plus importants qu'un simple accès web.
Cet exemple décrira uniquement la table Livre dans la base de données et la classe Livre correspondante.
Table [Livre]
IDLivre INT
Titre VARCHAR(255)
fkAuteur INT
Resume TEXT
Image VARCHAR(255)
QuantiteEnStock INT
QuantiteEnLocal INT
QuantiteEnPret INT
QuantiteReservee INT
QuantiteEnCommande INT
Type ENUM ('suggestion','valide')
class Livre {
public function creerLivre() {} //Une bibliothéquaire peut créer un livre sur son interface. Un visiteur du site peut suggérer un nouveau livre à commander.
public function chargeLivre() {} //Cette méthode peut être appelée sur le poste de la bibliothéquaire, mais aussi sur le site internet dans l'affichage détaillé d'un livre
public function emprunterLivre(typeEmprunt) {} //A lire sur place, ou à la maison
public function rameneLivre() {}
public function reserverLivre() {} //Un visiteur du site peut réserver un livre. Un abonné peut téléphoner pour demander que la bibliothéquaire saisisse la réservation à son nom, sur son interface
public function commanderLivre(quantite) {} //un bibliothéquaire peut décider d'acheter un certain nombre de livres
public function supprimerLivre() {} //Si on se rend compte de doublons, par exemple
public function sauvegardeLivre(listeInfos) {} //Lors d'un inventaire, la bibliothequaire met à jour les infos avec un lecteur de code barres wifi
}
class LivreCollection {
public function rechercheLivres(criteresDeRecherche) {} //Moteur de recherche du site internet et moteur de recherche de l'interface des bibliothéquaires
public function compteLivres(criteresDeComptage) {} //Statistiques sur les livres, certaines sont visibles sur le site, d'autres seulement sur l'interface admin
public function receptionLivres(listeIdLivresEtQuantites) {} //Sur l'interface d'admin, on peut signaler la reception de lot de livres qui avait été commandé
}
En un simple coup d'oeil le développeur comprend l'étendue des fonctionnalités de cette entité métier. Il peut ainsi appréhender non seulement le code mais les processus de fonctionnement du système. D'où le très grand intéret des classes métier en architecture logicielle.