ASP.NET MVC avec couche de service et couche de référentiel, où les interfaces doivent-elles être définies?
Je suis dans le processus de détermination assez simple architecture en couches pour une .NET MVC de l'application qui a un dépôt de couche et une couche de service. J'ai trouvé quelques claire et assez simple d'exemples, notamment www.asp.netet quelques questions et réponses ici, mais je suis à la recherche de quelque chose qui est un peu plus simple, adapté pour les petites applications, mais qui utilise différents projets, pour se faire une idée à travers. L'exemple que j'ai lié ci-dessus est le référentiel de service et des classes dans les Modèles d'espace de noms. Qui n'est tout simplement pas assez d'une séparation claire pour moi d'être en mesure d'illustrer correctement.
J'ai un autre projet pour le référentiel qui implémente l'interface IRepository. Il y a un separarate projet pour le Service qui implémente IService et prend un IRepository (constructeur d'injection). Le Service met en œuvre IService. Il suffit par exemple que le contrôleur instancier le service, pas besoin d'un conteneur IoC. Pensez-y comme une étape intermédiaire pour comprendre les meilleures pratiques d'architecture, partie d'une séquence qui construit progressivement pour englober l'injection de dépendance et peut-être plus de couches.
La question est, où dois-je définir IRepository et IService? À la fois le service et d'un dépôt de projets de référence, bien sûr. Il semble clair alors qu'ils devraient être définies dans un autre projet référencé par le service et dépôt des projets. Si oui, ce serait une bonne convention de nommage? Quelque chose comme XXXXContracts?
De même, pour les modèles de données transmis entre la présentation, de service et d'un dépôt de couches, est-il acceptable d'avoir un projet distinct appelé XXXXModels référencés par toutes les couches? Je comprends que, dans certains cas, les modèles transmis entre la signification et le dépôt de la couche peuvent différer de celles passées entre le service de la couche et la couche de présentation, mais le principe est le même.
J'ai trouvé des réponses à des questions similaires, mais ils ont tendance à impliquer un plus compliqué de l'architecture que de ce que j'ai indiqué ici. Je suis à la recherche pour obtenir un vraiment simple et propre illustration des deux couches qui peut être vu comme une étape ou deux au-dessus de référencement de la couche de données et d'avoir une logique d'entreprise dans les contrôleurs, c'est tout. Je sais qu'il est un solide argument valable pour aller droit à plein fouet des meilleures pratiques, mais pas tout le monde est apte à faire que de sauter d'un seul coup.
source d'informationauteur Mark Farr
Vous devez vous connecter pour publier un commentaire.
Introduction
C'est quelque chose que j'ai demandé moi-même. Une question brûlante, j'ai toujours semblable à la vôtre;
Comment dois-je nommer les choses? Faut-il aller dans des dossiers ou des projets?
Après recherche je soupçonne que la réponse est que il n'a pas vraiment d'importance. Ce qui est important, c'est que vous avez une solution a certains sensible de l'architecture et que vous essayez de suivre de bonnes pratiques telles que SOLIDE.
Mon ASP.NET MVC héros sur ce sujet sont Jeffrey PalermeSteve Smith et Jimmy Bogard.
Oignon Architecture
Jeffrey Palerme traite d'une combinaison de vieilles idées, mais les rassemble et donne visuellement stimulant nom de L'Oignon De L'Architecture (un recommandé de la lire). Jeffrey montre une bonne approche de la question de savoir où mettre les choses. Il explique que dans le centre (ou en haut) de votre application que vous avez votre de Base. Cette couche est où vous devez mettre les interfaces comme
IRepository
etIService
.Presque tous de vos interfaces devraient aller dans le cœur et tout le reste (autres projets) peuvent tous référence à la base. De cette façon, tout ce que sait la structure du squelette de l'application, sans en connaître les détails de mise en œuvre.
Essayez d'avoir votre INTERFACE de la couche de référence aussi peu que possible (dans la raison). Dans une de mes applications de mon INTERFACE (MVC) de la couche de référence seulement à la Base. Tout ce qu'il faut est injecté dans avec L'Injection De Dépendance.
Steve Smith parle de l'Oignon de l'Architecture et des idées similaires avec des démonstrations en MVC Solution de bonnes Pratiques: Une solution à la solution du problème
Ma solution
Dans mon MVC solutions j'ai une structure typique ressemble à ceci:
La de Base contient mes interfaces. Il est généralement divisés dans des dossiers tels que les Services, les Modèles de Domaine, Dépôts et ainsi de suite.
La Domaine de la couche de référence uniquement la base et contient ma mise en œuvre. Il fournit un grand nombre de classes concrètes pour le domaine de l'abstraction dans le noyau. Il traite avec beaucoup de logique d'affaires, de traitement, de gestion de commande, le gestionnaire de classes, de béton implémentations de service et ainsi de suite. Je considère que c'est un assez intérieure de la couche et donc il fait référence aussi peu que possible.
La DependencyInjection couche contient mon DI package/cadre et les détails de mise en œuvre. Je considère que c'est une couche externe; semblable à l'INTERFACE utilisateur ou de l'Infrastructure et donc c'est ok si elle fait référence à un lot. Il n'est pas nécessaire pour cette couche pour un projet distinct et beaucoup de gens vont vous dire de ne pas le faire. C'est ok, faire ce qui fonctionne pour la complexité de votre projet. J'aime ma DI sa propre chose. La bonne chose à ce sujet étant distincte est que je pourrais remplacer le DI-cadre avec un autre et tout irait pour le mieux. Pas de couches de référence de la DI projet.
La Infrastructure couche contient des informations sur l'enregistrement, l'envoi de courriels et l'accès aux données. Il contiendra mes ORM de choix. Ce n'est pas la logique de gestion des trucs et c'est pas des trucs de l'INTERFACE utilisateur. C'est le chemin de fer de ma solution pour faire avancer les choses. C'est sur la couche externe, mais il ne les références de la Base.
La Web couche est mon projet MVC et seuls les références de la Base.
De la complexité et de réflexions
C'est un bon point. Il est important de garder à l'esprit la complexité de votre problème. Mais ne soyez pas découragés par la bonne solution de pratiques. Ma solution à l'Oignon et l'Architecture ne sont pas forcément très complexe et n'a pas vraiment le ballonnement de votre solution. Ils ont juste garder les choses séparées.
Dans Évolution De La Structure De ProjetJimmy Bogard parle de choses plus complexes. Si ce que j'ai dit semble trop complexe, suivez les conseils de Jimmy et tout mettre dans le projet (votre couche d'INTERFACE utilisateur). C'est ok aussi longtemps que cela vous convient.
N'oubliez pas de prendre ma solution seulement comme une idée, quelque chose à prendre en compte; mon approche est une tentative de suivre les sages conseils de la meilleure, mais je suis sûr que j'ai seulement réussi tellement; je peut (et doit) toujours s'améliorer.