0

かなり標準的なリポジトリパターンがあり、構築時にリポジトリがMVCコントローラーに注入されます。リポジトリはAppDomainごとに1回初期化され、他のコントローラーによって共有されます。リポジトリはNHibernateISessionsとICriteriaを使用してデータベースにアクセスしますが、アクセスはICriteriaを直接受け入れるのではなく、ListXYZメソッドを使用して公開されます。

私は今、証明書の場合に返される結果を制限するためのきちんとした方法が必要です。そのようなものの1つは、たとえば、アクションが呼び出されたときにのみ知られる、特定の市場のすべての製品をリストすることです。

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

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

何か提案はどうすればいいですか?それとも私はそれを自分にとって複雑にしすぎていますか?

4

1 に答える 1

0

これについては、仕様パターンを試すことができます。2 つの制約 (仕様) を別の方法で使用するのは少し奇妙です。私はするだろう

var rep = new Repository<Product>();
var specification = new MarketSpecification("xy") && new CategorySpecification("shirts");
var list = rep.Find(specification);
于 2009-07-09T19:30:47.490 に答える