Einführung
Das habe ich mich auch gefragt. Eine brennende Frage, die ich immer habe, ähnelt Ihnen;
Was wäre eine gute Namenskonvention?
Wie soll ich Dinge nennen? Sollten sie in Ordner oder Projekte gehen?
Nachdem ich herum gesucht habe, vermute ich, dass die Antwort das ist Es spielt keine Rolle. Wichtig ist, dass Ihre Lösung eine vernünftige Architektur hat und Sie versuchen, gute Praktiken wie zu verfolgen, z. FEST.
Meine ASP.NET -MVC -Helden zu diesem Thema sind Jeffrey Palermo, Steve Smith und Jimmy Bogard.
Zwiebelarchitektur
Jeffrey Palermo diskutiert eine Kombination alter Ideen, bringt sie aber zusammen und gibt ihm den visuell anregenden Namen von Zwiebelarchitektur (Eine empfohlene Lektüre). Jeffrey zeigt eine gute Herangehensweise an das Problem, wohin Dinge gestellt werden sollen. Er erklärt, dass Sie in der Mitte (oder oben) Ihrer Bewerbung Ihre haben Kern. In dieser Ebene sollten Sie Schnittstellen wie z. IRepository
und IService
.
Fast alle Ihre Schnittstellen sollten im Kern gehen und alles andere (andere Projekte) können alle auf den Kern verweisen. Auf diese Weise kennt alles die Skelettstruktur der Anwendung, ohne die Implementierungsdetails zu kennen.
Versuchen Sie, Ihre UI -Schichtreferenz so wenig wie möglich (innerhalb von Grund) zu haben. In einer meiner Anwendungen verweist meine UI (MVC) -Schicht nur auf den Kern. Alles, was es braucht, wird in sie injiziert Abhängigkeitsspritze.
Steve Smith diskutiert Zwiebelarchitektur und ähnliche Ideen mit Demonstrationen in MVC -Lösung Best Practices: Eine Lösung für das Lösungsproblem
Meine Lösung
In meinen MVC -Lösungen habe ich eine typische Struktur wie diese:
- MyProject.core
- MyProject.domain
- MyProject.DependencyInjection
- MyProject.infrastructure
- MyProject.Web
- MyProject.tests
Das Kern Enthält meine Schnittstellen. Es ist normalerweise in Ordner wie Dienste, Modelle, Domäne, Repositorys usw. unterteilt.
Das Domain Layer verweist nur auf den Kern und enthält meine Implementierung. Es bietet viele Betonklassen für die Domänenabstraktion im Kern. Es befasst sich mit viel Geschäftslogik, Verarbeitung, Befehlsbearbeitung, Managerklassen, konkreten Service -Implementierungen usw. Ich betrachte es für eine ziemlich innere Schicht, und so verweist es so wenig wie möglich.
Das Abhängigkeitsspritze Layer enthält mein ausgewähltes DI -Paket/Framework- und Implementierungsdetails. Ich betrachte es als äußere Schicht; Ähnlich wie die Benutzeroberfläche oder die Infrastruktur und daher ist es in Ordnung, wenn sie viel verweist. Es ist nicht erforderlich, dass diese Ebene ein separates Projekt ist, und viele Leute werden Ihnen sagen, dass Sie dies nicht tun sollen. Das ist okay; Tun Sie, was für die Komplexität Ihres Projekts funktioniert. Ich mag es, wenn mein DI sein eigenes Ding ist. Das Gute daran, dass es so getrennt ist, ist, dass ich das DI -Framework durch ein anderes ersetzen könnte und die Dinge in Ordnung sind. Keine Ebenen verweisen auf das DI -Projekt.
Das Infrastruktur Layer enthält Informationen zu Protokollierung, E -Mail und Datenzugriff. Es wird meine enthalten Orm nach Wahl. Es ist kein geschäfteslogisches Zeug und es ist kein UI-Zeug. Es ist die Eisenbahn meiner Lösung, um Dinge zu erledigen. Es ist auf der äußeren Schicht, verweist aber nur den Kern.
Das Netz Layer ist mein MVC -Projekt und verweist nur auf den Kern.
Komplexität und letzte Gedanken
Ich habe hier Antworten auf ähnliche Fragen gefunden, aber sie beinhalten eine kompliziertere Architektur als das, was ich hier beschrieben habe
Es ist ein guter Punkt. Es ist wichtig, die Komplexität Ihres Problems zu berücksichtigen. Aber lassen Sie sich nicht von guten Lösungspraktiken abschrecken. Meine Lösung und meine Zwiebelarchitektur sind nicht unbedingt sehr komplex und aufblähen Ihre Lösung nicht wirklich. Sie halten die Dinge einfach getrennt.
Im Evolutionsprojektstruktur, Jimmy Bogard spricht darüber, dass Dinge überkomplex sind. Wenn das, was ich gesagt habe, zu komplex erscheint, folgen Sie Jimmys Rat und geben Sie alles in das eine Projekt (Ihre UI -Ebene). Das ist in Ordnung - solange es zu dir passt.
Denken Sie daran, meine Lösung nur als Idee zu nehmen - etwas zu beachten; Mein Ansatz ist ein Versuch, dem Besten den Ratschlägen des Besten zu folgen, aber ich bin sicher, ich habe es nur so sehr gelungen. Ich kann (und muss) noch verbessern.