[Architecture] Conception multi-couches
Bonjour,
Bon je vais commencer par le début. Je développe actuellement un projet ASP.NET assez important en utilisant une conception multi-couches.
J'ai décomposé ma conception ainsi :
- Couche IHM (pages)
- Couche Controleur (manipulation des données récupérées de l'IHM + manipulations d'objets DAO + manipulation d'objets métier)
- Couche Métier (objets métiers)
- Couche DAO (objets d'accès aux données)
- Couche de Mapping ORM (avec NHibernate)
Voilà, donc en fait on peut lire dans de nombreux bouquins que les objets c'est avant tout un ensemble d'attributs et d'opérations (classique).:)
Mais tout mon problème est déjà là; ma couche controleur manipule mes objets métiers et les objets DAO et réalise en qq sorte une grande partie de la logique applicative + logique métier. Donc du coup mes objets métiers n'ont presque plus besoin d'avoir de méthodes puisque le controleur fait tout (et a donc tendance à devenir imposant) ! Or de nombreux ouvrages préconisent que le controleur ne doit que "déléguer" le soin aux objets métiers d'effectuer ces tâches.
Alors vous me direz, dans ce cas tu n'as qu'à déplacer ta logique métier dans les méthodes des objets métier (logique quoi ! ;) )
Hé bien non ! parce que comme vous l'avez vu, mon controleur manipule aussi des DAO, c'est à dire que j'ai besoin de pouvoir charger certains objets depuis une base de données, en d'autres termes, travailler avec des objets initialisés. Or si je me mets à effectuer cette tâche dans les objets métiers eux même, je ruine ma conception puisque les objets métiers manipuleraient des objets d'accès aux données.
Je vais juste prendre un exemple pour éventuellement clarifier un peu :
Dans mon projet commercial, j'ai une classe CoefficientIndividuel qui doit prendre en compte de nombreux paramètres distincts. Par exemple le taux d'absence d'un commercial, le fait qu'il soit à temps plein ou non etc ..
Or toutes ces données sont dispatchées dans des objets métiers bien distincts et pas forcément toujours directement reliés entre eux (ex : Commercial, Absence, TempsTravail). Or je ne peux pas donner la possibilité de faire réaliser le calcul par ma classe CoefficientIndividuel (mais c'est ce que j'aimerais faire !!), puisqu'il faudrait charger (initialiser) d'abord tous les objets dont j'ai besoin pour travailler avec eux, ce qui n'est pas le rôle de l'objet métier.
/* Note pour ego ici : j'ai d'ailleurs tout spécialement du mal à comprendre pourquoi dans ton tutorial sur SPRING on voit une classe Produit qui est lié à un ProduitDAO, ou alors il y a un problème de fond qui m'échappe */
La seule solution serait donc d'initialiser tous les objets dans le controleur puis d'appeller la méthode de l'objet métier en passant en paramètre tous les objets déjà initialisés (mais personnellement je trouve ça très pourri).
Voilà si qqn a compris, est-ce qu'il (ou elle) pourrait m'aider à clarifier cette situation ?
Merci d'avance :mrgreen: