正規の Customer ドメイン オブジェクトがあるとします。顧客が表示される 3 つの異なる画面があります: 外部管理者、内部管理者、およびアカウントの更新です。
さらに、各画面には Customer オブジェクトに含まれるすべてのデータのサブセットのみが表示されるとします。
問題は、UI が各画面から (たとえば DTO を介して) データを返すときに、完全な Customer ドメイン オブジェクトのサブセットのみが含まれていることです。したがって、Customer オブジェクトを再作成するためにその DTO を Customer Factory に送信すると、Customer の一部しか得られません。
次に、この顧客を顧客リポジトリに送信して保存すると、そこにないため、大量のデータが消去されます。悲劇が起こります。
問題は、この問題にどのように対処するかです。
私のアイデアのいくつか:
顧客のどの部分を更新するかを示す引数をリポジトリに含め、他の部分を無視する
顧客をロードするときは、静的メモリ、セッション、またはどこにでも保持し、UI から DTO の 1 つを受け取ったら、DTO に関連する部分のみを更新します。
IMO、これらはどちらもクラッジです。他に良いアイデアはありますか?
@chadmyers: ここに問題があります。
エンティティにはプロパティ A、B、C、および D があります。
DTO #1 には、B と C のプロパティが含まれています。
DTO #2 には、C および D のプロパティが含まれています。
UI は DTO #1 を要求します。エンティティをリポジトリから読み込み、DTO #1 に変換し、B と C のみを入力して、UI に渡します。
ここで、UI は B を更新し、DTO を送り返します。エンティティを再作成すると、DTO に含まれているのは B と C だけなので、B と C だけが入力されます。
次に、B と C のみが入力されたエンティティを保存し、A と D を null/空白にします。リポジトリは、A と D を空白として永続的に更新する必要があるかどうか、またはそれらを無視する必要があるかどうかを知る方法がありません。