DDD: Der Versuch, Code Sortieren und Filtern, wie es Poco, Repository, DTO betrifft, und DAO C #?

StackOverflow https://stackoverflow.com/questions/2445462

Frage

ich eine Liste der Einzelteile von meinem Repository erhalten. Jetzt muss ich sie sortieren und zu filtern, was ich glaube, für Effizienz im Repository getan würde. Ich denke, es wäre zwei Möglichkeiten, dies in einer DDD Weise tun:

  1. Senden Sie einen Filter und eine Art Objekt volle Bedingungen zum Repository (Was heißt das)?
  2. Repository Ergebnis wäre ein Objekt mit .filter und .Sort Methoden produzieren? (Dies würde kein POJO / POCO sein, weil es mehr als ein Objekt enthält?).

So ist die Antwort 1, 2, oder andere? Könnten Sie erklären, warum? Ich bin Neigung in Richtung # 1, weil das Repository der Lage wäre, nur um die Daten zu senden ich will (oder wird 2 # der Lage sein, zu verzögern Daten wie ein LazyList Zugriff?) Ein Code-Beispiel (oder Website-Link) wäre sehr hilfreich sein.

Beispiel:

  1. Produkt Produkt = repo.GetProducts (mySortObject, myFilterObject); // Liste des Poco
  2. product.AddFilter ( "Preis", "lessThan", "3.99"); product.AddSort ( "Preis", "absteigende");
War es hilfreich?

Lösung

Dies ist keine vollständige Antwort, aber Sie vielleicht einen Blick auf einige der Gedanken hinter CQRS (Command Query Verantwortung Segregations) (einige gute Links können nehmen wollen gefunden werden hier ).

CQRS ist ein Weg, über DDD zu denken, dass kann helfen, einige dieser klären. Es ist auf einem höheren Niveau als Ihre Frage, aber es könnte helfen.

Im Grunde denke ich, es wird Sie nur entscheiden, helfen Sie mit Ihrer ersten Wahl zu gehen (das ist, was ich mit in einer ähnlichen Situation endete). Wir nannten es ein Abfrageobjekt.

Andere Tipps

Ich persönlich würde bei Ihrer ersten Option gehen.

Wenn Sie die zweite Option denken aus einer DDD Perspektive des Produkt-Objekt, das ich gehe davon ist Ihr Domain-Objekt, hat ein Wissen über etwas, das nicht wirklich Teil des Geschäfts Problems ist, dass Sie versuchen, IE zu lösen ( Sie Domäne). Vielmehr Sortierung und Filterung wird in der Benutzerschnittstelle oder eine anderen Back-End-Verarbeitungskomponente verwendet.

Darüber hinaus, wenn sie bei der zweiten Option aus einer einzigen Verantwortung (auch bekannt als SOLID) Perspektive suchen Sie werden sehen, dass Ihr Product Business-Objekt hat die Verantwortung für die Sortierung und Filterung, etwas, das gar nicht zu einem Produkt bezogen ist.

Das ist, wie ich die Dinge sehe. Ich würde in anderen Meinungen interessiert.

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