0

現在、システムのリファクタリングを行っています。

次の状況があります。

このシステムは、複数のビジネス セクターにまたがる企業に関する情報を提供することを目的としています。各企業は、1 つまたは複数のセクターで活動することができます。企業は特定のパートナー プログラムに参加できます。企業は、1 つまたは複数のパートナー メーカーを持つことができます (たとえば、ガレージは BMW/メルセデスとパートナーシップを持つことができます)。これらの参加はすべて、一定の期間 (有効期間) 存在します。さらに、BMW のようなメーカーは、1 つのビジネス セクターに縛られています。そのため、BMW が企業のビジネス セクターに有効である場合にのみ、企業は BMW のパートナーになることができます。つまり、このシステムは、ガレージのようなビジネス部門の企業を維持するだけでなく、レッカー サービスなども維持するためです。

だから今、私のデザインはいくつかの不変条件を引き起こす可能性があります。

会社 -> 割り当て (ゆっくりと変化しない) -> 事業部門

会社 -> パートナーシップ (日付から - まで) -> 組織 <- 事業部門

会社と組織が同じ事業部門の割り当てを共有する必要がある場合。

したがって、現在、組織の事業部門の割り当てを変更することができます。すると、同じ業種は無効というルールになります。

そのようなものをどのようにモデル化しますか?

4

2 に答える 2

2

このビジネス ルールを適用する DDD 準拠の方法が 2 つあります。

  • DDDは、集約の不変条件が集約ルートによって強制される必要があることを指定します。Company が集約ルートである場合、それに新しいパートナーシップを追加すると、パートナーシップがビジネス セクター ルールに準拠しているかどうかを確認できます (仕様パターンを使用する可能性があります: EligibleForPartnershipSpecification など)。

  • 組織の事業部門を変更するときは、 「運用できるか」という観点で考えるとよいでしょう。「このエンティティは有効ですか?」ではなく . 企業リポジトリ内の企業が、変更後に矛盾するパートナーシップを持っているかどうかを確認し、それに応じて何をすべきかを決定することを意味する場合があります (ポリシー / 戦略パターンに基づく可能性があります)。

コントラクトは、不変条件を強制するもう 1 つのスマートな方法です。http: //msdn.microsoft.com/en-us/magazine/hh205755.aspx (.NET)を参照してください。

于 2011-12-21T13:26:35.793 に答える
0

あなたの説明で何かが間違っています。この設計には集約ルートはありません。

しかし、論理的にはおそらく次のステートメントは競合します

BMW のようなメーカーは、1 つのビジネス セクターに限定されます (1)

組織の事業部門の割り当てを変更できます (2)

その場合、それらのいずれかを回避する必要があります。

(2)が偽なら大丈夫ですよね?そのような変更を許可しないだけです。

(1) が間違っている (というより、それほど限定的ではない) 場合、ビジネス セクターとの組織の境界も一定の期間に限定されるべきです。その場合はパートナーシップの期間限定と同じ要領で作成します。

たとえば、Partnership.EndDate を Organization->Sector リンク変更の日付に設定できます。

さらに、参加したセクター組織の履歴リストを維持することもできます。ビジネス ルールは、パートナーシップとセクター割り当ての期間の一致を強制します。

それが役立つことを願っています。(実際には、一般的な設計に関する質問はプログラマーのサイトに行く必要があります。)

于 2011-12-21T10:19:09.550 に答える