5

ルートエンティティは、内部エンティティへの一時的な参照を外部オブジェクトに渡すことができますが、操作の完了後に外部オブジェクトがその参照を保持しないという条件の下で

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)

正解です。これを確認するのはあなたの責任です。値を与えるオブジェクトが(必要に応じて)不変であることを確認する必要があるのと同じように、渡された参照の整合性を考慮する必要があります。

ほとんどの場合、操作が完了したらすぐに参照を削除するのは外部オブジェクトの責任だと思いますか?

4

2 に答える 2

3

1a)ドメイン操作をサポートするためにエンティティへの参照が必要になる場合がありますが、その参照は操作後に保持されないため、一時的なものである必要があります。手術後ではなく、手術中のみ保持されるため、2回の手術で保持できるという誘導はありません。これのポイントは、外部エンティティへの参照を渡したアグリゲートがその構成要素の制御を維持できるようにすることです。その内部エンティティが他の集合体に乗っ取られることは望ましくありません。そうすると、動作について推論することがより困難になるためです。

1b)ユースケースに応じて、どちらの方向にも進むことができます。プロパティは、変装した単なるメソッドです。

2a)これは正しいので、渡されたオブジェクトが変更されていないことを確認するのが最善ですが、不変の方法で使用されます。さらに、渡されたエンティティは、それ自体である程度の整合性を維持できます。

2b)正解です。これを確認するのはあなたの責任です。値を与えるオブジェクトが(必要に応じて)不変であることを確認する必要があるのと同じように、渡された参照の整合性を考慮する必要があります。

これのほとんどは、「行儀の良い」結果になり、推論が容易で、一貫性のある集計を簡単に作成できるため、一般的なガイドラインです。

アップデート

2a)プログラミング言語の制限を考えると、集合体がそれ自体をどれだけうまく保護できるかには限界があります。その結果、特にこのようなより複雑なシナリオでは、「人間の介入」が必要になります。骨材が他の骨材に翻弄される可能性があるのは事実であり、それがこれらのガイドラインが実施されている理由です。

2b)はい。外部オブジェクトは別のアグリゲートの内部エンティティを利用できますが、参照は一時的である必要があります。つまり、永続化されません。

于 2013-01-23T18:34:20.377 に答える
0

プライベートエンティティを持つオブジェクトがロックを取得し、そのエンティティへの参照を外部メソッドに渡します。外部メソッドは、そのメソッドがスコープを離れた後も存在する場所にオブジェクトをコピーすることはできません。その後、ロックを解放します。ロックが解除されたときに、外部エンティティが参照を保持しないようにしてください。ロック内のどこかのコードが例外をスローした場合でも、その不変条件は保持されます。外部メソッドがエンティティへの参照を存続する可能性のある場所に格納できる場合、他のアクションによってその参照が破棄されると約束されていても、外部参照を破棄するために必要なアクションが実際に発生することを確認するのは非常に困難になりますロックが解除される前。

于 2014-02-04T21:17:00.450 に答える