2016-08-22 150 views
0

我正在爲新應用程序中的存儲庫層創建參考模型。我從UserRepository開始。我喜歡在回購級別遵循CRUD(創建 - 讀取 - 更新 - 刪除)命名約定的想法。回購方法命名約定

public User Read(int userId)

它似乎感覺到了搜索方法不太自然:

public List<User> Read(UserQuery query)

你曾經嘗試按照您的倉庫一個CRUD命名約定這對於GetById方法感覺自然?你會按照我在上面定義我的第二個方法簽名的方式定義搜索方法簽名,還是會遵循不同的命名約定?

+2

值得一讀:https://lostechies.com/jimmybogard/2012/10/08/favor-query-objects-over-repositories/ –

回答

1

我想給我的知識庫collection semantics。沿着Add(),Remove()和一系列Get()的行的東西。

不一定Update(),因爲它告訴集合更新元素沒有多大意義,所以通常從集合中獲取對象,然後直接修改它。

這來自域驅動設計視角,其中存儲庫的原始定義是內存集合的錯覺。存儲庫接口是在域層中定義的,所以它不應該引用與持久性相關的東西。

簡而言之,一個Repository只是一個你可以查看,添加和刪除的東西。

Search()非常符合這個願景。您也可以使用Specification pattern使搜索條件更加流暢和可重用。