2016-08-22 42 views
0

新しいアプリケーションでリポジトリレイヤの参照モデルを作成しています。私はUserRepositoryから始めています。私は、CRUD(Create-Read-Update-Delete)命名規則をレポレベルで実行するという考えが好きです。これはGetById方法のために、自然な感じ:リポジトリの命名規則

public User Read(int userId)

検索メソッドの少ない自然な感じのようです:

public List<User> Read(UserQuery query)

あなたがあなたのリポジトリのCRUDの命名規則に従うことをしようとしてください?上記の2番目のメソッドのシグネチャを定義した方法でSearchメソッドのシグネチャを定義するか、別の命名規則に従いますか?

+2

これを読む価値があります。https://lostechies.com/jimmybogard/2012/10/08/favor-query-objects-over-repositories/ –

答えて

1

私は私のリポジトリを提供したいですcollection semanticsAdd()Remove()、および一連のGet()の行に沿ったものです。

必ずしもUpdate()である必要はありませんが、コレクションに要素を更新するように指示するのはあまり意味がないため、通常はコレクションからオブジェクトを取得し、代わりに直接変更します。

これは、リポジトリの元の定義がメモリ内コレクションのような錯覚であるドメイン駆動設計の観点から来ています。リポジトリ・インタフェースはドメイン・レイヤーで定義されているため、永続性関連の参照はありません。

単純に言えば、リポジトリは、あなたが調べたり、追加したり削除したりすることができる単なるバッグです。

Search()はこのビジョンに完全に適合します。また、Specification patternを使用すると、検索基準をより流暢かつ再利用可能にすることができます。