6

仕様パターンを使用する N 層アプリケーションがあります。ここで、仕様をクライアント コードに構築する方法をいくつか提供したいと思います。次のように、いくつかの事前定義されたオプションである必要があります。

  • 同等
  • より大きい
  • 含む

これらのオブジェクト (フィルターと呼びましょう) には、ロジック (メソッド) を含めてはならず、データ (フィルターの種類とパラメーター) のみを含める必要があります。そして、それらをサーバーで仕様に変換する自然な方法が必要です。クライアント側からどのように見えるかの例を次に示します。

var serviceClient = new DataModuleService();
var equalFilter = new ContainsFilter<Book>("Title","Lord of the Rings");
var lordOfTheRingBooks = serviceClient.GetBooks(equalFilter);

すべての標準演算 (Equal、Greater、In、Between、文字列の StartsWith など) のフィルター タイプと、それらをブール演算子 (and、or、not) と組み合わせる方法も必要です。

そのようなことを実装するためのパターン/標準的な慣行はありますか?


UPD:タスクは今のところ凍結されており、タスクの定義自体に問題があると思い始めました。

4

2 に答える 2

4

大まかな答え-言及されているすべての論理演算子と条件演算子をサポートするLINQ式を試すことができると思います。System.Linq.Expressions名前空間を調べて、使用可能なタイプを確認します

便利なリンク:

于 2012-07-17T19:55:09.607 に答える
2

あなたがやろうとしていることは、 Hibernateがその基準クエリで行っていることのように思えます。興味のあるフィルターを作成したい場合は、それらを組み合わせることができます。

これは C# ではありませんが、Java と C#は似たような言語なので、そこからいくつかのアイデアを借りることができるかもしれません。

さらに、Hibernate の .NET への移植 (NHibernate) を使用して、同じ条件クエリを実行することもできます (ただし、API が Java のものと同じかどうかは正確にはわかりません)。

于 2012-07-17T19:39:00.557 に答える