2009-07-09 11 views
0

ビルド時にリポジトリがMVCコントローラに注入されるかなり標準的なリポジトリパターンがあります。リポジトリはAppDomainごとに1回初期化され、他のコントローラと共有されます。リポジトリはHibernate ISessionsとICriteriaを使用してデータベースにアクセスしますが、ICriteriaを直接受け入れる代わりにListXYZメソッドを使用してアクセスが公開されます。リポジトリからの結果を制限する

certianのケースで返される結果を制限するためのきちんとした方法が必要です。たとえば、アクションが呼び出されたときにのみ知られている、特定のマーケットのすべての商品をリストすることがあります。

多くのオーバーロードされたメソッドにつながるので、ListXYZメソッドを呼び出すたびにこの制限を渡したくありません。理想的には、以前のようにリポジトリにアクセスできるようにしたいが、制限が適用されている。次のようなもの:

var rep = new ProductRepository().ApplyRestriction(new MarketRestriction("xy")); 
var list = rep.ListInCategory("shirts"); 

どのようにすればいいですか?それとも私は自分自身のために複雑すぎるのですか?

答えて

0

この場合、specification patternを試すことができます。別の方法で2つの制限(仕様)を使用するのは少し奇妙です。 私はします

var rep = new Repository<Product>(); 
var specification = new MarketSpecification("xy") && new CategorySpecification("shirts"); 
var list = rep.Find(specification); 
+0

ありがとう、私はそれが実装するにはあまりにも複雑になると思ったので、これは長い間避けました。しかし、一度それを覚えれば、それはあまりにも悪いように見えず、とてもうまく機能します。 – kaa

関連する問題