Frage

Disclaimer:. Ich bin ziemlich neu in DDD und die dazugehörige Terminologie, so dass, wenn ich irgendwelche Konzepte falsche Etikettierung bin, bitte korrigieren Sie mich,

Im Moment arbeite ich an einem Ort mit einer relativ einfachen Domain-Modell (Katalogartikel, von denen jedes eine Sammlung von CatalogImage Elemente gespeichert.)

Mein Repository folgt die Standard-Schnittstelle von FindbyID(int ID) GetAll() etc ...

Das Problem entsteht, wenn ein bestimmtes Bild von seiner ID zu finden versuchen; Ich am Ende mit Methoden wie FindImagebyID(int CatalogItemID, int ImgID)

Als neues requirments entwickeln, und das Objektgraph wird stärker verschachtelte, ich könnte eine Explosion von Methoden wie Find{NestedType}ByID(int catalogItemID,.....,int nestedTypeID) siehe

Soll ich einfach ein IEnumerable aus dem FindAll () -Methode zurückkommen, und unter Verwendung von Linq in einer höheren Schicht diese Abfragen zu bilden? Oder wird, dass eine Verletzung von SoC sein?

War es hilfreich?

Lösung

Es klingt für mich wie Sie eine Begründung für den Aufbau mehreren Repositories.

Beispiel

interface CatalogRepository
{
    Catalog FindByID(int ID);
}

interface CatalogImageRepository
{
    CatalogImage FindByID(int ID);
}

Dies wird Ihre Bedenken richtig trennen, da jedes Repository nur verantwortlich für die wissen, wie man mit dieser bestimmten Einheit zu behandeln.

Andere Tipps

Ich würde das Modell auf einer Ebene über dem Repository, mit LINQ auswählen, wenn Sie mögen. Mach das Repository einfach. Wenn Sie LINQ verwenden die Daten zu erhalten aus der Datenbank diese Methode sehr gut funktioniert, wenn Sie ADO oder eine andere Legacy-Datenzugriffsschicht zu verwenden, die als es machen könnte es schwieriger, das Repository so einfach zu machen. Linq macht es einfach so, dass Sie das Repository IQueryable zurückkehren können und lassen Sie die nächste Schicht die Filterung und die tatsächliche Abruf von Daten hinzufügen, geschieht nicht, bis er gefragt wird. Dies macht es möglich, ein Verfahren auf dem Repository wie GetImages zu haben (), die alle Bilder bekommen, und die nächste Schicht fügt die Filterung für ein bestimmtes Bild. Wenn Sie ADO verwenden, werden Sie wahrscheinlich nicht gehen zu wollen alle Bilder dann filtern, um wieder .... so ein Kompromiss sein könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top