タグ付けされた質問 「aggregate」

6
DDD集計はWebアプリケーションで本当に良いアイデアですか?
私はドメイン駆動設計に飛び込み、私が出会う概念のいくつかは表面的にはかなり理にかなっていますが、それらについてもっと考えるとき、それは本当に良いアイデアかどうか疑問に思う必要があります。 たとえば、集計の概念は理にかなっています。ドメインモデル全体を扱う必要がないように、所有権の小さなドメインを作成します。 ただし、これをWebアプリのコンテキストで考えると、データベースに頻繁にアクセスして、データの小さなサブセットを取り戻します。たとえば、ページには注文の数だけがリストされ、クリックして注文を開いて注文IDを表示するリンクが表示されます。 私は右の理解集約だ場合、私は一般的にメンバーが含まれますOrderAggregateを返すために、リポジトリのパターンを使用することになりGetAll、GetByID、Delete、とSave。いいですね。しかし... GetAllを呼び出してすべての注文を一覧表示すると、このパターンでは、集計情報の一覧全体、注文全体、注文明細などが返される必要があるように思えます。その情報の小さなサブセットのみが必要な場合(ヘッダー情報のみ)。 何か不足していますか?または、ここで使用する最適化のレベルがありますか?必要のないときに情報の集合体全体を返すことを支持する人がいるとは想像できません。 確かに、リポジトリのようなメソッドを作成できGetOrderHeadersますが、そもそもリポジトリのようなパターンを使用する目的に反しているようです。 誰も私のためにこれを明確にすることはできますか? 編集: さらに調査を重ねた結果、ここでの断絶は、純粋なリポジトリパターンが、ほとんどの人がリポジトリと考えているものと異なることだと思います。 Fowlerは、リポジトリをコレクションセマンティクスを使用するデータストアとして定義し、通常はメモリ内に保持されます。これは、オブジェクトグラフ全体を作成することを意味します。 Evansはリポジトリを変更して集約ルートを含めるため、リポジトリは切断され、集約内のオブジェクトのみをサポートします。 ほとんどの人は、リポジトリを栄光に満ちたデータアクセスオブジェクトと考えているようです。ここでは、必要なデータを取得するメソッドを作成するだけです。これは、ファウラーの「エンタープライズアプリケーションアーキテクチャのパターン」で説明されているような意図ではないようです。 さらに、リポジトリは、主にテストとモック作成を簡単にするため、または永続性をシステムの残りの部分から切り離すために使用される単純な抽象化と考えています。 答えは、これが最初に思っていたよりもはるかに複雑な概念であると思います。

2
集計境界を設計する方法は?
eコマースのようなアプリケーションを書きたいのですが。 また、類似のアプリケーションでは、製品のプロパティと機能が異なる場合があります。このような機会をシミュレートするために、次のドメインモデルエンティティを作成しました。 カテゴリ -これは「エレクトロニクス>コンピューター」のようなもの、つまり製品のタイプです。Сategoriesには、プロパティのリストが含まれています(List <Property>)。 プロパティ -名前、測定単位、データ型を含む独立したエンティティ。たとえば、「名前」、「重量」、「画面サイズ」。同じプロパティに異なる製品を含めることができます。 製品 -プロパティに関連する名前と値のリストのみが含まれます。Valueは、プロパティの値フィールドとフィールドIDのみを含むオブジェクトです。 たとえば、新しい製品を追加するときに、現在のカテゴリに関連するプロパティ(category.AddNewProduct(product))を含む現在のカテゴリに関連するすべてのデータを知る必要があるため、このスキームでカテゴリを単一の集計のようにすることを最初に決定しました。しかし、どのカテゴリにも属さない新しいプロパティを追加する必要がある場合はどうすればよいですか。たとえば、特定のカテゴリにプロパティを追加することを明確に示しているため、このcategory.AddNewProperty(property)は実行できません。 次のステップでは、個別のプロパティを個別の集計に決定しましたが、それは単純なエンティティのリストになります。 もちろん、PropertyAggregateのようなものを作成して、プロパティとビジネスルールの内部リストを保持できますが、製品を追加するときは、不変条件を確認するために、このカテゴリに属する​​プロパティのリスト全体をカテゴリ内に含める必要があります。しかし、アグリゲート内のリンクを他のアグリゲートで維持することは悪い習慣であることも知っています。 このビジネスケースを設計するためのオプションは何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.