2016-08-22 1 views
0

Ich erstelle ein Referenzmodell für die Repository-Ebene in einer neuen App. Ich beginne mit UserRepository. Mir gefällt die Idee einer CRUD (Create-Read-Update-Delete) Namenskonvention auf Repo-Ebene. Das fühlt sich natürlich für die GetById Methode:Repo-Methode Namenskonvention

public User Read(int userId)

Es scheint weniger natürlich für die Suchmethode zu fühlen:

public List<User> Read(UserQuery query)

Versuchen Sie jemals eine CRUD Namenskonvention für Ihre Repositories zu folgen ? Würden Sie eine Signatur der Suchmethode so definieren, wie ich oben meine zweite Methodensignatur definiert habe, oder würden Sie einer anderen Namenskonvention folgen?

+2

Lesenswert dieses: https://losechies.com/jimmybogard/2012/10/08/favor-query-objects-over-repositories/ –

Antwort

1

Ich gebe gerne meine Repositories collection semantics. Etwas in den Linien von Add(), Remove() und eine Reihe von Get() 's.

Nicht notwendigerweise Update(), da es nicht sehr sinnvoll ist, einer Sammlung mitzuteilen, dass ein Element aktualisiert werden soll, holen Sie das Objekt normalerweise aus der Sammlung und ändern es stattdessen direkt.

Dies stammt aus einer Domain Driven Design-Perspektive, bei der die ursprüngliche Definition eines Repositorys eine Illusion einer speicherinternen Sammlung ist. Die Repository-Schnittstelle ist in der Domain-Schicht definiert, daher sollte sie keinen Bezug zu Persistenz-bezogenen Dingen haben.

Um es einfach auszudrücken, ein Repository ist nur eine Tasche von Dingen, die Sie suchen, hinzufügen und entfernen können.

Search() passt perfekt in diese Vision. Sie können auch die Specification pattern verwenden, um Suchkriterien flüssiger und wiederverwendbar zu machen.