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