|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 |
|
Membre du Club
![]() Inscription : septembre 2004 Messages : 101 ![]() |
En fait, je pars dans l'optique de ne pas créer de VO/DTO...
Actuellement, j'imagine donc utiliser mes objets métiers dans mes couches supérieures de deux façons : - Comme conteneur de données (pour l'affichage des valeurs de mon objet, par exemple) - Comme conteneur de critéres de recherche (pour le filtrage) Par rapport à ce que vous dites, je n'ai peut-être pas suffisamment de connaissances (ou de scrupule L'intérêt que j'y vois est que mes classes métiers possède une intelligence élevée et qu'elles sont donc autonomes et utilisables dans les couches supérieures (et je n'implémente pas de classe de type (VO/DTO)) Concernant l'accés aux données, étant donné que je n'utilise pas d'outil ORM (manque de temps pour apprendre à les utiliser --Avis au lecteurs-- Je n'en suis toujours (plus ou moins) qu'à un niveau théorique et mon expérience sur la conception en couche ne date que d'une semaine, donc prenez ce post avec précautions |
|
|
00
|
|
|
#22 |
|
Membre habitué
![]() Inscription : avril 2005 Messages : 206 ![]() |
Je signale à tous ceux qui sont intéressés par le développement en couche l'existence d'un framework gratuit Dot.Net spécifiquement conçu, pour ce que j'en ai compris, pour faciliter le développement de la couche métier.
http://www.lhotka.net/Area.aspx?id=4# http://www.primos.com.au/primos/Defa...ID=50&tabid=67 |
|
|
00
|
|
|
#23 |
|
Membre du Club
![]() Inscription : septembre 2004 Messages : 101 ![]() |
Merci
Tu l'as testé ? |
|
|
00
|
|
|
#24 |
|
Membre habitué
![]() Inscription : avril 2005 Messages : 206 ![]() |
Non, mais j'ai commandé le livre, que je devrais bientôt recevoir.
|
|
|
00
|
|
|
#25 |
|
Membre Expert
![]() Inscription : novembre 2002 Messages : 1 029 ![]() |
Salut à tous !
Merci Promeneur pour le lien. Je ne peux pas regarder tout de suite mais ça a l'air sérieux (bouquins, support du FX 3.0, site et doc complets, etc.).
__________________
(\ _ /) (='.'=) (")-(") |
|
|
00
|
|
|
#26 |
|
Membre Expert
![]() Inscription : janvier 2006 Messages : 1 142 ![]() |
Un post intéressant !
Néanmoins j'ai un peu de mal à comprendre ce que vous appelez contrôleurs applicatifs. Un exemple ? |
|
|
00
|
|
|
#27 | ||||||
|
Membre régulier
![]() |
Salut,
si je ne me trompe les contrôleurs applicatifs sont les contrôleurs qui gèrent un cas utilisateur (use case en anglais). par exemple considère le problème où tu passes une commande le controleur applicatif va offrir des métodes pour réaliser le use case. Des évennements dans l'IHM vont pouvoir déclenché leur éxécution. Code c# :
Le controlleur applicatif va ensuite utilisé les objets métiers ou encore une couche d'indirection (ici j'utilise directement un modèle métier riche et la persistance est assurée par un manager recu par le controleur lors de son initialisation par injection) example pour trouver le prix de la commande Code c# :
Code c# :
une strategy peut alors calculer le prix sans que le client ne voient des règles compliquées comme 10% de réduc sur le produit A, calcul des cout de transport, reduction membre, promotion de noel. Tout ca en déléguant bien sûr à des services compétants :-) Vraiment pas sûr là: l'utilité d'un controleur métier peut être de coordonner des actions complexes et peu relatées. par example pour valider un commande il faut coordonner la mises à jours des stocks, une autorisation de cartes bancaires, une commande de transport, etc Voilà en espérant de ne pas m'être trompé et que ca t'as éclairé :-) Dom |
||||||
|
|
00
|
|
|
#28 |
|
Membre du Club
![]() |
Hello,
Je vous livre quelques compléments sur l'architecture que j'ai adopté depuis quelques mois (basée sur .NET) Je me suis bcp basé sur l'excellent PetShop v.4 de Microsoft et sur celui de DNG. Plusieurs couches au rendez-vous : Présentation (IHM + codeBehind) Facade (interfaces des services) Services ( c'est l'équivalent des controleurs de cas d'utilisation) BLL ( = la couche d'objets métiers. Ils contiennent la logique métier, les méthodes métiers, et des méthodes statiques (finders etc...)) DAO ( = couche d'accès aux données, basée sur NHibernate) Une couche est transversale à toutes celles-ci : la couche Model. Il s'agit des objets du domaine. Ils ne contiennent pas de logique métier et sont sérializables, ce qui permet de les manipuler dans la couche IHM, même si celle-ci se situe sur un serveur différent que les autres couches (techniques de Remoting ou WebServices). Je n'ai pas mis en oeuvre d'IOC pour l'instant dans mon architecture. C'est une évolution à prévoir. Attention à l'utilisation d'un framework de persistance lors de l'utilisation sur des tiers phyisques différents ! (prévoir des DTO pour éviter d'embarquer la logique de mapping avec vos entités métiers, ou rajouter des méthodes dans vos services qui permettent d'initialiser vos collections définies en lazy-loading) Sinon ça va vous péter à la figure @+ |
|
|
00
|
|
|
#29 | |
|
Membre habitué
![]() Inscription : avril 2005 Messages : 206 ![]() |
Citation:
|
|
|
|
00
|
|
|
#30 |
|
Membre du Club
![]() |
|
|
|
00
|
|
|
#31 |
|
Membre habitué
![]() Inscription : avril 2005 Messages : 206 ![]() |
merci
|
|
|
00
|
|
|
#32 |
|
Membre du Club
![]() |
Hello,
Je reposte quelques mois plus tard pour vous faire part de mes choix. Après plusieurs essais d'architectures, j'ai abouti à un modèle qui parait assez solide. J'aimerais savoir ce que vous en pensez. ![]() Quelques explications : Une couches Model (mon modèle d'entités = les POCO) Une couche IHM (les pages ...) Une couche Adaptation optionnelle (je l'utilise pour convertir mes objets Model en objets composites "linéaires" utilisables dans des GridView (DataGrid) .NET par exemple) Une couche Facade optionnelle : il s'agit des interfaces de ma couche Service partagés par le client et le serveur. Une couche Service optionnelle : il s'agit d'identifier des services qui pourraient être utlisées dans d'autres applications (démarche SOA). Ces services regroupent des grosses fonctionnalités comme une structure hiérarchique d'une entreprise par exemple... Une couche IBLL : Ce sont les interfaces de la couche BLL partagés par le client et le serveur. Une couche BLL : elle contient les managers (contrôlent les opérations CRUD et Finders sur les entités métiers). Elle contient également les objets métiers (qui sont réponsables des traitements métiers). Une couche DAO : ce sont les objets d'accès aux données. Les couches sont réparties sur plusieurs serveurs (3-tier) IHM & Adaptation : Serveur Web ou Winforms (client) Service, BLL, DAO : Serveur applicatif (serveur) Model, IBLL et Facade sont partagés entre les serveurs. Comme j'utilise NHibernate pour gérer l'accès aux données, j'ai implémenté un DynamicProxy pour ouvrir et fermer automatiquement les sessions. Ce dynamic proxy est instancié lors de l'appel à la couche Service ou BLL. J'ai reproduit le modèle proposé par Sami Jaber dans son excellent article intitulé Conception n-tiers et mapping objet/relationnel avec .NET et J2EE Voilà, j'attends vos remarques avec impatience |
|
|
00
|
|
|
#33 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Salut,
Pourquoi considérer les interfaces comme une couche? Le principe d'une architecture en couches est de n'autoriser la communication qu'avec le voisin du dessus et du dessus. A+
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|
00
|
|
|
#34 |
|
Membre du Club
![]() |
parce qu'elles se distribuent plus facilement (ex. référence d'assembly en .NET)
|
|
|
00
|
|
|
#35 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Citation:
Merci A+
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|
|
00
|
|
|
#36 |
|
Membre du Club
![]() |
oui, et c'est d'ailleurs le seul moyen de faire lorsque tu fais du remoting par exemple. En gros tu crées un proxy sur tes objets métiers que tu manipules via les interfaces de ces objets métiers. Du coup pour avoir accès à ces interfaces à la fois côté client et côté serveur, tu es obligé d'avoir une DLL contenant ces interfaces d'un côté et de l'autre.
|
|
|
00
|
|
|
#37 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Aurais-tu un argument convainquant pour justifier la séparation d'un objet de ses méthodes
Mettons l'objet suivant: Code :
Je cherche des arguments convaincants A+
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
||
|
00
|
|
|
#38 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Citation:
A+
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|
|
00
|
|
|
#39 | ||
|
Membre du Club
![]() |
Citation:
C'est pour cela qu'il faut que le serveur Web ET le serveur applicatif partagent les interfaces des objets, tu n'as pas d'avoir le code de ces objets côté serveur Web par exemple, seules les interface suffisent, puisque le code réside en fait sur le serveur applicatif. Citation:
D'abord l'article de ego, très facile à lire, et tu as pas mal d'arguments dedans : http://ego.developpez.com/uml/tutori...ments-v1.2.pdf Ensuite DNG propose des articles qui parlent de cette façon de faire. Et enfin, regarde du côté du PetShop 4.0 de Microsoft, c'est un exemple d'application et de "best practices" dans le cas d'une application .NET (mais les concepts se valent également dans une application Java). Tu verras qu'il préconisent également cette façon de faire (couche Model avec objets de type "structure de données", et objets métiers dans la couche BLL). Bonne lecture @+ |
||
|
|
00
|
|
|
#40 | ||||||||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Cool merci.
Ceci dit, il apparait que la création d'un modèle indépendant des couches se base sur le postulat: "c'est le concept fondamental de la programmation orientée objet". Autrement dit c'est une donc bonne façon de faire. Toutefois, si je comprend bien qu'il faut faire confiance à l'exéperience, y a-t-il un cas concret démontrant qu'il est préférable de faire ainsi? Je dois trouver une approche pédagogique convaincante. Par exemple, je joins un diagramme de classe avec un objet "modèle" et des classe permettant l'allocation de sa propriété "Libelle". Deux héritent du modèle. Chacune des méthodes alloue la propriété de façon différentes (dans l'exemple la chaine n'aura pas la même valeur). Le nom des méthodes est toujours le même (AllocateLibelle), du coup j'aurais pu utiliser une interface. Quelles critiques feriez-vous? Laquelle est plus facile à utiliser, faire évoluer? Le code de (le namespace devrait être Immobilis.EComm.Bll mais c'est pas grave)
Code :
Code :
Code :
Code :
Code :
A+
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
||||||||||
|
00
|
Copyright © 2000-2013 - www.developpez.com