3

リポジトリからアイテムのリストを取得します。次に、それらを並べ替えてフィルタリングする必要があります。これは、効率を上げるためにリポジトリで行われると思います。DDDの方法でこれを行うには2つの方法があると思います。

  1. フィルタと条件でいっぱいのソートオブジェクトをリポジトリに送信しますか(これは何と呼ばれますか)?
  2. リポジトリの結果は、.filterメソッドと.sortメソッドを持つオブジェクトを生成しますか?(複数のオブジェクトが含まれているため、これはPOJO / POCOではありませんか?)

それで、答えは1、2、または他ですか?理由を説明していただけますか?リポジトリは必要なデータしか送信できないため(または#2はLazyListのようにデータへのアクセスを遅らせることができるので)、#1に傾いています。コード例(またはWebサイトリンク)は非常に役立ちます。

例:

  1. 製品product=repo.GetProducts(mySortObject、myFilterObject); //Pocoのリスト
  2. product.AddFilter( "price"、 "lessThan"、 "3.99"); product.AddSort( "price"、 "descending");
4

2 に答える 2

2

私は個人的にあなたの最初の選択肢を選びます。

DDDの観点から2番目のオプションについて考えると、ドメインオブジェクトであると私が想定している製品オブジェクトは、解決しようとしているビジネス上の問題の一部ではないことについての知識を持っています(つまり、ドメイン)。むしろ、並べ替えとフィルタリングは、ユーザーインターフェイスまたはその他のバックエンド処理コンポーネントで使用されます。

Productさらに、単一責任(別名SOLID)の観点から2番目のオプションを見ると、ビジネスオブジェクトが、製品とはまったく関係のない並べ替えとフィルタリングの責任を負っていることがわかります。

それが私が物事を見る方法です。他の人の意見に興味があります。

于 2010-03-15T07:45:38.230 に答える
2

これは完全な答えではありませんが、CQRS(コマンドクエリ責任分離)の背後にある考え方のいくつかを確認することをお勧めします(いくつかの良いリンクはここにあります)。

CQRSは、このいくつかを明確にするのに役立つDDDについての考え方です。それはあなたの特定の質問よりも高いレベルですが、それは役立つかもしれません。

基本的に、それはあなたが最初のオプションを選択するのに役立つと思います(これは私が同様の状況で終わったものです)。これをクエリオブジェクトと呼びました。

于 2010-03-15T10:19:45.633 に答える