Gibt es Richtlinien für die Entscheidung, wann sich eine Klasse in einer eigenen Assembly / DLL befinden soll? Ich sehe oft zwei Denkschulen:
1) Jede "Gruppierung" von Klassen gehört zu einer eigenen DLL, z. B. Repositorys, Services, DTOs, Infrastruktur usw.
2) Alles sollte sich in einer einzigen DLL befinden, aber über Namespaces / Ordner getrennt sein, z. B. eine "Core" -DLL mit zusätzlichen Namespaces, z. B. Core.Repositories, Core.Services, Core.DTO usw.
Bei der Arbeit fassen wir einfach alles in einer einzigen Versammlung namens "Business" zusammen. Es gibt einige Ordner, aber keine wirkliche Trennung - Geschäftsobjekte (mit Logik, von denen einige nicht einmal Klassen sein sollten) werden in einem "BusinessObjects" -Ordner ohne Sorgfalt zusammengefasst. Dinge, die in mehr als einer Klasse verwendet werden, befinden sich in einem "Core" -Ordner. Dienstprogramme befinden sich in einem Ordner "Dienstprogramme", die Datenzugriffsinfrastruktur ist ein Ordner "Daten" - Sie haben die Idee.
Für ein neues Modul, an dem ich arbeite, möchte / muss ich eine separate Datenzugriffsebene haben (denken Sie an eine rudimentäre Repository-Implementierung), aber ich möchte es nicht einfach mit den anderen 160 (!) In den Ordner "BusinessObjects" werfen. Klassen dort. Gleichzeitig mache ich mir Sorgen um die Erstellung einer neuen Klassenbibliothek, da jeder daran gewöhnt ist, eine Klasse in der einzelnen Bibliothek zu stopfen. Ein Ordner / Namespace könnte jedoch funktionieren.
quelle
"Onkel Bob" Martin von Clean Code, SOLID Principles Fame hat hier drei Prinzipien umrissen :
Als Faustregel gilt, dass Sie die Anzahl der Projekte in Ihrer Lösung so gering wie möglich halten sollten. Teilen Sie sie nur auf, wenn dies zur Implementierung einer oder mehrerer spezifischer User Stories erforderlich ist oder wenn eine einzelne Assembly messbare Leistungsprobleme verursacht (in der Regel, wenn sie mehrere Megabyte groß sind).
quelle
Einige andere Leitprinzipien, mit denen ich arbeite:
Denken Sie, Sie werden diesen Code in anderen Projekten wiederverwenden? Für eine Gruppe verwandter Webanwendungen hatten wir ein Modul für Benutzerkonten, das von allen Anwendungen verwendet wurde, da sie alle dasselbe Modell für Benutzerkonten und Anmeldungen verwendeten. Ich habe ähnliche Dinge mit Geometrie- und Mathematikbibliotheken gemacht und sie in mehreren Anwendungen wiederverwendet, nur indem ich die DLL einbezog.
Möchten Sie in der Lage sein, diesen Code zu ändern / bereitzustellen, ohne das gesamte Projekt erneut bereitzustellen / neu zu kompilieren? Manchmal war es hilfreich, nur das Modul neu zu erstellen, die Webanwendung bereitzustellen und neu zu starten.
Es klingt so, als ob in Ihrem Fall ein einfaches und generisches Repository in Zukunft wieder nützlich sein könnte. Es könnte sich lohnen, es in eine neue DLL zu unterteilen, wenn Sie können.
quelle