ルートエンティティは、内部エンティティへの一時的な参照を外部オブジェクトに渡すことができますが、操作の完了後に外部オブジェクトがその参照を保持しないという条件の下で
1)
a) 1回の操作の間、(内部エンティティへの)参照を持つ外部オブジェクトが受け入れられるのに、2回の操作の間、その参照を保持することは受け入れられないのはなぜですか?私の言いたいことは、2回の操作の間、参照を保持するのが悪い場合、1回の操作の間、参照を保持するのも同じくらい悪いのではないでしょうか。
b)SomeRootEnt
集約ルートが内部エンティティの一時的な参照 SomeIntEnt
を外部オブジェクトに渡すと仮定すると、外部オブジェクトはどのように要求する必要がありますSomeIntEnt
か?ルートで特定のメソッドを呼び出すことによって(たとえば)、SomeRootEnt.BorrowMeIntEnt(...)
またはルートはそのプロパティとして内部エンティティを直接公開する必要がありますか(たとえば)?SomeRootEnt.SomeIntEnt
2)
SomeRootEnt
a) rootが内部エンティティ SomeIntEnt
への参照を外部オブジェクトに渡し、それが次にいくつかの変更を行うと仮定すると、これは、 rootがそれらの変更に適切な不変ロジックを適用する方法がないSomeIntEnt
ことを意味しません(つまり、rootは変更されたの整合性?SomeIntEnt
b)同様に、少なくとも私の理解では、rootには、単一の操作の完了後に外部オブジェクトに内部エンティティへの参照を強制的にドロップさせる方法もありませんか?
ありがとうございました
アップデート:
2a)
これは正しいので、渡されたオブジェクトが変更されていないことを確認するのが最善ですが、不変の方法で使用されます。さらに、渡されたエンティティは、それ自体である程度の整合性を維持できます。
渡されたエンティティが変更されないようにするのは、主に集約ルート(および部分的に渡されたエンティティによる)または外部オブジェクト(一時的な参照を受け取る)の責任ですか?後者の場合、この集合体の一貫性は、実際には外部オブジェクトを開発した人に翻弄されているのではないでしょうか。
2b)
正解です。これを確認するのはあなたの責任です。値を与えるオブジェクトが(必要に応じて)不変であることを確認する必要があるのと同じように、渡された参照の整合性を考慮する必要があります。
ほとんどの場合、操作が完了したらすぐに参照を削除するのは外部オブジェクトの責任だと思いますか?