Quels sont les types de calques dans un oignon de l'architecture?
J'étudie actuellement le domain driven design, et essayer de l'appliquer pour un projet WPF. J'ai regardé quelques vidéos du tutoriel, et de lire de nombreux articles, comme :
- L'oignon archicecture dépendances dans la même couche: Infrastructure Web et de la communication
- http://eohmicrosoft.blogspot.fr/2012/08/laying-it-out-onion-architecture.html
- Domain Driven Design: Domaine De Service, Service De L'Application
J'ai compris l'accent mis sur les interfaces et l'inversion de contrôle. J'ai lu il y avait quelques récurrente de la couche de noms de domaine/de base pour la représentation de la sphère de la connaissance, des infrastructures pour la persistance, de la demande de ... je ne comprends pas), mais ils changent, en fonction des articles que j'ai lu. Certains même n'apparaissent pas.
Serait-il possible d'avoir un liste de tous les calques qui, en théorie, sont nécessaires dans un oignon architecture pour faire face à tous les besoins et les problèmes, à leur intention (ce genre de code qu'ils ne contiennent, ce type de besoin-ils essayer de remplir, qui les couche-ils besoin de référence), s'il vous plaît ?
OriginalL'auteur David Khuu | 2013-08-10
Vous devez vous connecter pour publier un commentaire.
Tout à fait d'accord avec Hippoom de réponse. Il est parfait pour commencer à partir de là.
Maintenant,
Oui, la décision sur les calques dans une application dépend de nombreux facteurs dans un scénario particulier. C'est comme la façon dont une des universités de diviser leurs programmes et de rendre le programme. Elle dépendra de la capacité ou de la diversité qu'ils veulent servir, le besoin en main et le but de l'université. C'est très différent dans les détails (nom et partitions) à travers le monde mais le cœur et l'intention est toujours la même.
De la même façon, les Couches d'une application dépend de la nécessité et la portée. Parfois, les architectes utilisé pour définir le nom de couches en fonction de leur philosophie et de la convention de suivre dans l'organisation. Alors, parfois, l'intention et le nom peut différer dans une certaine mesure. Mais le code idée d'avoir vendable, facile à gérer et à s'acquitter de la fonctionnelles et les exigences non-fonctionnelles en main, reste toujours la même.
Hippoom fait déjà très bien et il a décrit le but du tir aussi.
Standard Couches sont décrites ici: http://jeffreypalermo.com/blog/the-onion-architecture-part-1/
Comme je l'ai déjà mentionné couches peut varier selon les applications en ont besoin.
Espère que ça vous aidera. Merci.
Inclus des détails comme par David premier commentaire ci-dessous:
Services d'Application mettre en œuvre les cas d'utilisation et d'effectuer des appels vers les Services de Domaine et le Domaine des Entités et des Services d'Infrastructure dans le but d'obtenir le travail fait. Il dispose d'interfaces avec le monde extérieur (principalement de l'INTERFACE utilisateur de la couche de projets) pour accomplir certaines fonctionnalités. Par exemple, UserService est une application de service. UserService peuvent fournir des fonctionnalités pour vérifier l'authentification de l'utilisateur et l'autorisation pour une ressource particulière, modifier les privilèges d'un utilisateur admin, interdire à l'utilisateur de etc. Pour accomplir ces cas d'utilisation, il devrait utiliser UserRepository et UserEntity à partir des couches inférieures.
Services de domaine sont d'application-agnostique; ils fournissent un moyen de s'assurer de l'intégrité du modèle de domaine par l'encapsulation des opérations CRUD (Create, Read, Update, Delete) les opérations et les données d'accès. Ils ont généralement des Dépôts d'objets de Domaine et UoW mise en œuvre dans l'Oignon de l'Architecture.
Les services de domaine et les services d'Application sur ce lien stand de même ce Domaine et l'Application de la couche de n'en Hippoom de réponse. Il est juste de nommage des écarts de conversion. Les services d'Application et de service de Domaine de détails, j'ai inclus au bas de ma réponse en raison de la limite de mots dans un commentaire ici. Merci.
Merci pour la réponse. Je suppose que j'ai trois dernières questions. Qu'est-ce que la couche de l'infrastructure pour, que doit-elle contenir ? Où va la logique de présentation (est-il de l'INTERFACE utilisateur/Présentation/Interfaces de la Couche)?
La plupart de bienvenue ! Les couches de l'Infrastructure ont infrastructures des préoccupations telles que l'interaction avec une base de données (paramètre de base de données etc. et évidemment, il serait utilisé dans d'autres couche ayant logique de faire du CRUD sur le domaine entités), la communication à travers un réseau (si le service web externe comme paypal ou FTP, etc appel), l'envoi d'un e-mail par SMTP etc.. La Présentation Logique de l'INTERFACE utilisateur/Présentation/Interfaces de la Couche. L'INTERFACE utilisateur de couches de préoccupation au sujet de la façon dont vous voulez afficher les données, Il peut avoir côté client, des validations et des animations, etc ... si vous utilisez ceux de l'INTERFACE utilisateur. Espérons qu'il allait les aider. Merci.
Donc, en général, "l'INTERFACE utilisateur", "Présentation" et "Interfaces" sont la même chose ici?? Et de l'Infrastructure de base est le même couche d'accès aux Données, droit?
OriginalL'auteur Praveen Prajapati
Juste une expérience personnelle, j'utilise cette architecture mentionné dans Eric Même du DDD livre:
En bref:
1) Interfaces est constitué de composants qui sont responsables de l'interaction avec l'utilisateur(un utilisateur du système d'extrémité ou à une machine distante), web mvc contrôleur, web objet de vue, à distance de la façade par exemple.
2) Application définit quelles sont les caractéristiques de votre système. Je pense que c'est très couplé avec les Interfaces de la couche. Si vous définissez une méthode dans l'Application, il est souvent nécessaire d'ajouter des Interfaces de classe/méthode. Mais plusieurs Interfaces de classe/méthode repose sur le même objet Application, vous fournir à la fois une interface web et un service web pour passer une commande, par exemple.
3) de Domaine, le plus stable de la partie de votre système. Par exemple, dans la langue du contexte, le mot/phrase de Domaine sont des objets qui ont leur signification propre, je oganized pour former cette réponse. Afin de vous pouvait me considérer comme un objet d'Application, bien que pas un bon car je ne parle pas couramment l'anglais 😛
4) Infrstructure, en fait, je ne pense pas que ce soit une couche, elle met en œuvre tous les trois ci-dessus. Par exemple, vous disposez d'une interface OrderRepository dans votre domaine de couche et vous pourriez mettre en œuvre à l'aide de certaines orm (persistance de l'infrastructure). La plupart de mes objets de l'infrastructure sont des adaptateurs (implémente une interface de l'Application/Domaine/Interfaces de la couche et de s'adapter à des composants externes comme les bases de données, fournisseur de messagerie, serveur de messagerie et ainsi de suite).
Espère que cette aide.
Mise à jour pour l'infrastructure de l'intention:
C'est l'un de nos projets de vue des paquets.
Il y a quelques cartes dans la couche de l'infrastructure:
1.l'infrastructure.canal.XXX chaque paquet contient plusieurs cartes à un fournisseur de services de paiement en ligne.
2.l'infrastructure.paiement contient des cartes à un système de paiement de notre organisation, mais il est dans un autre contexte délimité. Nous utilisons MakePaymentService (un service de domaine) pour découpler le système de paiement de l'autre partie de ce système.
3.l'infrastructure.messagerie contient des adaptateurs de messagerie du fournisseur, nous fournissons un jms mettre en œuvre pour PaymentWasMadeNotifier (application service)
4.l'infrastructure.la persistance contient des cartes de base de données, nous fournissons un iBATIS(un orm en Java) pour le Domaine des Référentiels.
Ces adaptateurs ci-dessus tous les implémente une interface s/Domaine couches.
Ci-dessous quelques "service", mais ils sont génériques:
5.l'infrastructure.mail
6.l'infrastructure.la journalisation
7.l'infrastructure.sécurité
Ces package ci-dessus exposer une interface et des implémentations. Par exemple, nous fournissons un MailManager interface, il est agnositic à des caractéristiques particulières. L'objet, le contenu est à l'application de la couche/couche domaine. Nous fournissons une mise en œuvre à l'aide de javamail dans le même package.
8.l'infrastructure.de temps celui-ci est spécial, nous avons une tâche cron dans ce système, si nous introduisons une Horloge de découpler le temps de travail de réglage et, par conséquent, de son accueil à des tests (imaginez un peu que nous avons un travail, il doit être lancé le 25, tous les mois, nous pouvons tester le travail par le réglage de l'heure actuelle à 25, même si c'est la 1ère aujourd'hui). Nous fournir une implémentation de la persistance de package(Pour certaines raisons, nous avons besoin d'utiliser la base de données " temps de la production)
Si ma compréhension est: l'infrastructure fournit un service/implémentations de vos trois autres couches, mais ils sont spécifiques à la technologie. Par exemple, l'Objet, le contenu, de, à, cc sont les modèles de domaine dans le contexte de diffusion, mais ils sont des infrastructures dans le domaine de votre contexte. La couche de l'infrastructure séparé pour vous.
mise à jour de réponse pour votre infrastructure commentaire.
OriginalL'auteur Yugang Zhou