Umgang mit Enums, wenn sich Schnittstellen in einem separaten Projekt befinden

8

Ich habe die folgenden Projekte in einer Visual Studio-Lösung für eine Anwendung:

  • Allgemein - Hilfsprogramme und Erweiterungen
  • Entitäten - Rich-Domain-Objekte mit Geschäftslogik, die für Instanzen spezifisch ist
  • Repositories - Datenrepositorys
  • DataServices - Thin Wrapper für Repositories enthält Geschäftslogik, die nicht für eine Instanz spezifisch ist
  • Schnittstellen - Alle Schnittstellen für Entitäten und Repositories

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.

    
Uwe Keim 14.11.2013, 15:32
quelle

3 Antworten

9

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.

    
D Stanley 14.11.2013, 15:34
quelle
2

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.

    
Tim S. 14.11.2013 15:35
quelle
0

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;

    
Bassam Alugili 14.11.2013 15:49
quelle

Tags und Links