3

Ich habe eine MVC-Layer-Anwendung und ich habe einige Fragen über Cross Cutting Layer. Bis jetzt hat diese Schicht Logging, DI, Fehlerbehandlung und Cache.Querschneideschicht | Automapper | Dependency Injection

Ich habe ein Projekt erstellt und alle diese Funktionen nach Ordnern getrennt. Ist das ok? Oder sollte ich für jedes Feature ein Projekt erstellen?

Da ich in diesem Projekt Autofac (DI-Ordner) eingerichtet habe, musste ich Referenzen zu den anderen Projekten hinzufügen: Model, Repository und Service. Ist es in Ordnung, diese Referenzen zum Cross Cutting-Projekt hinzuzufügen?

Soll ich ein separates Projekt erstellen, um gemeinsame Funktionen zu gruppieren? Zum Beispiel Enums, Konstanten und Methoden wie GetMd5Hash. Oder sollte ich Cross Cutting Projekt dafür verwenden?

Sollte ich Automapper als Cross Cutting Concern betrachten? Bisher habe ich es in der Präsentationsschicht eingerichtet, um von Entity zu ViewModel und ViewModel zu Entity zu konvertieren. Aus diesem Grund musste ich einen Verweis auf Model hinzufügen, den ich gerne vermeiden würde.

Antwort

0

Normalerweise haben Sie Cross cutting consons (CCC) Helfer, die in Ihrer gesamten Anwendung verwendet werden. Diese Helfer könnten in einem oder mehreren Projekten definiert werden. Ich persönlich frage mich diese 2 Fragen vor der Entscheidung über Granularität meiner Bibliotheken:

1- Ist eine Art von B verwandt? Kann ich sie in 1 Kategorie (z. B. CCC) setzen?

2- Gibt es einen Fall, dass ich A ohne B (oder umgekehrt) in einem anderen Projekt verwenden muss?

Wenn Antwort auf die erste Frage ist Ja und auf die zweite ist nein dann in die gleiche Bibliothek/Paket.Und immer Wiederverwendung in Betracht ziehen, wenn Sie sich entscheiden, Zeug in verschiedenen Projekten zu setzen.

Diese Helfer sollen keine Verweise auf Ihre Hauptprojekte haben, da sie nur Helfer und Dienstprogramme sind und Geschäftslogik und Geschäftsdomänen agnostisch sein sollten.

In Ihren Hauptprojekten (MVC-App oder Business Logic Layer-Bibliotheken) werden Sie diese Helfer in Ihrem Code verwenden. Oder Sie verwenden Aspect-orientierte (AOP) Bibliotheken, um sie in Ihren Code zu injizieren.

Ich würde Dinge wie DI und Auto-Mapper nicht als Querschnitts-Probleme betrachten. Protokollierung, Auditing, Authentifizierung, Autorisierung und Caching sind gute Beispiele für CCC. Aber Dinge wie DI und Automapper sind die Dinge, die Sie verwenden, um Ihre Architekturmuster und -designs zu implementieren, damit sie anders sind. Und es macht keinen Sinn, neue Bibliotheken oder Helfer zu erstellen, um sie in Ihrem Projekt anzuwenden.

+0

Dank @akazemis, also glauben Sie, es wäre interessanter, ein Projekt zu haben, DI einzurichten und ein anderes, um Mappings einzurichten? Sowohl DI als auch Mapping müssen über die anderen Projekte Bescheid wissen, deshalb möchte ich sie trennen. –

0

Gern geschehen, ja, Sie können das tun, aber warum sollten Sie sie in ein separates Projekt stecken? Möchten Sie sie in verschiedenen Projekten wiederverwenden? Wenn das der Fall ist, erstellen Sie Projekte für sie.