Ich habe die folgenden Projekte in einer Visual Studio-Lösung für eine Anwendung:
Der Grund, warum ich die Interfaces in ein separates Projekt einfüge, ist, zirkuläre Projektreferenzen zu vermeiden. Dadurch können zwei Projekte auf eine gemeinsame Schnittstelle verweisen, ohne dass das Projekt mit der konkreten Implementierung referenziert wird.
Ich habe absichtlich keine Projektreferenzen im Projekt Interfaces gemacht, um zirkuläre Projektreferenzen zu vermeiden. Ich erstelle eine Schnittstelle für Klassen, die in anderen Projekten definiert sind. Dadurch kann ich auf die Objektschnittstelle verweisen, im Gegensatz zur konkreten Implementierung in anderen Schnittstellen.
So wäre ein Beispiel:
%Vor%Das Problem, auf das ich gestoßen bin, ist, wenn eine Schnittstelle auf eine in einem anderen Projekt definierte Aufzählung verweist. Ohne die Enums im Projekt Interfaces zu verschieben, weiß ich nicht, wie ich auf die Enums verweisen soll, ohne Projektreferenzen zu erstellen, zum Beispiel:
%Vor%Der Acme.Entities.Status schlägt fehl, wenn ich nicht auf das Acme.Entities-Projekt referenziere, sondern einen Zirkelverweis, weil Acme.Entities auf das Interfaces-Projekt verweist.
Sie müssen entweder die Enum-Definition in das Interfaces-Projekt oder in ein separates Projekt verschieben, auf das beide Projekte verweisen.
Ich persönlich würde sie im selben Projekt behalten - ein separates Projekt nur für Enums zu haben, erscheint als Overkill.
Ich würde sagen, dass Ihre grundlegenden Datentypen (einschließlich enum
s, interface
s und class
es) alle in einem Projekt sein sollten. Daher sollte Ihr Interfaces
-Projekt diese enum
und alle anderen gemeinsamen Datentypen enthalten (möglicherweise abstract
Basistypen). Entities
sollte weiterhin implementierungsspezifische Elemente enthalten, die die Basissachen in Interfaces
erweitern und / oder verwenden. Es kann auch sinnvoll sein, Interfaces
mit Ihrem Common
-Projekt zusammenzuführen, da gemeinsame Logik und gemeinsame Daten oft zusammenpassen.
Wenn Sie Ihre Komponenten und Schnittstellen richtig definieren, werden Sie dieses Problem nie bekommen.
Ich schlage vor, zuerst Ihren Code und Ihre Anwendungsarchitektur mit diesen zwei Prinzipien zu überprüfen:
Domain Driven Desgin --- & gt; Sehr impotente Regeln: Ссылка
Ich stimme auch damit überein, dass Sie die SHARED Enums auf eine gemeinsame IConstants.cs verschieben müssen. Enums sind nichts anderes als Konstanten;
Tags und Links c# architecture enums interface