3

簡単なことを見落としていることはほぼ間違いありませんが、クリックされていません。

Personエンティティ(Person集計のルート)があります。また、ロールのリストと権限のリストを持つ認証と承認(Auth)の子エンティティがあります。

ルートでAddAuthRoleなどのメソッドを使用して、ルートを介してロールと権限の変更を管理したい。

これはかなり簡単ですが、Authエンティティで同様の機能を公開せずにこれを行うにはどうすればよいですか?子への参照を使用しているコンシューマーが、これらのリストに対して追加と削除を試みてほしくない。

これは基本的なOOの概念であり、気づかないことを恥じるべきだと感じています...

4

3 に答える 3

3

アグリゲートのメンバーへのアクセスを制限することは、厳密な施行よりも慣例の問題です。私はあなたが骨材の周りに置くことができる「物理的な」境界を信じていません、それらはあまりにも制限的で不必要に複雑です。.NETのDDD/Aggregatesを参照してください

あなたの例ではクラスのデザインを完全には理解していませんが、Authentication andAuthorizationがPersonAggregateのメンバーであり、それらを保護したい場合は、外部からそれらを参照しないでください。これは、チームのすべてのプログラマーが気にする必要のある基本的なDDD規則です。つまり、集約ルートを直接指すものを除いて、相互集約参照はありません。

不変の値オブジェクトを使用している場合、ドメインオブジェクトのアクセス制限と保護の必要性も大幅に減少します。ロールとパーミッションは通常、そのような値オブジェクトである可能性があり、外部オブジェクトがそれらの状態をいじったり変更したりするリスクなしに、それらを世界に公開することができます。そもそもAggregatesの目的は、一部のエンティティのすべての操作ルールを1か所に集めて、だれもがこれらのエンティティをいじらないようにするためです。

于 2012-05-30T09:10:19.473 に答える
1

より制限の厳しいインターフェースであるIEnumerableを介してリストを公開すると、アグリゲートのユーザーがリストにアクセスする方法を制御できるようになります。IEnumerableを介して公開されたリストを、ルートのadd / removeメソッドと組み合わせると、私が解釈したとおり、必要なものが得られるはずです。

于 2012-05-30T09:23:52.637 に答える
-1

公開されたメソッドは保護する必要があり、その他はすべて非公開にする必要があります

于 2012-05-29T22:01:43.237 に答える