0

私はDDDがタスクベースのUIでうまくいくことは知っていますが、私はAnemic Domain Model(ビジネスロジックのない多くのセッター)があるレガシーアプリケーションをリファクタリングしています。DDDを使用してエンティティ(CRUD)とドメインイベントを更新する方法

最初のステップの1つは、モデルに到達させてドメインイベントを追加することでした。モデルを作成するためのイベント(コンストラクタ内のTaskCreated)を追加して(TaskRemoved)簡単なプロセスですが、私はモデルを更新するのに苦労しています。

PUT /tasks/{id}エンドポイントを持つRESTful APIがあります。ボンネットの下フレームワークは、DTOオブジェクトへの応答のボディをマッピングして、一つ一つのセッターを呼び出します。

task.setText('new text'); 
task.setStartDate(newStartDate); 
// and so on 

私はタスクが更新されたときに、いくつかのイベントを聞くと、例えば、それを更新したいですGoogleカレンダー。 イメージングできるので、各setter(TextChanged、StartDateChanged)のイベントを記録してそれらのすべてを聴くと、私は、私が望むものではないGoogle APIへの多くのAPIコールを終了します。

質問は:正しい方法で更新操作をどのように行う必要がありますか?私はsettersのすべてのコールをupdate(newData)コールで置き換えて、そこにただ1つのドメインイベントをディスパッチすべきですか?どのようにするだけタスクが更新された後googleカレンダーにAPI呼び出しを行うには?

答えて

0

正しい方法で更新操作を行うにはどうすればよいですか?

一般的な答えは、ドメインイベントは変更するオブジェクトの一部ではなく、別のデータ構造の変更を記述することです。

貧血モデルでは、発信者がイベントの原因となることが予想されます。おそらくではなく、のフレームワークであれば、DTOフィールドをタスクに自動的にマッピングするだけです。エディットのビジネスコンテキストを理解しているコード内のポイントでイベントを定義する必要があります。言い換えれば、おそらくではなく、TaskRescheduledが必要です。

最初の草案では、保存が成功した時点でイベントを公開することができます。

より堅牢なのは、タスクのリストをタスクに保存することです。これにより、信頼性の高いメッセージングについてより良い物語が得られます.Udi Dahan Reliable Messaging Without Distributed Transactionsを参照して、これがどこに向かうのかをよりよく理解してください。

貧血ではないドメインモデルでは、実際にはタスク更新内でイベントを定義します(データモデル内のイベントは依然としてタスクの状態とは別です)。

+0

「貧血ではないドメインモデルでは、実際にはタスク更新内でイベントを定義します」 と非貧血モデルのコードは何ですか?私は、同時にいくつかのフィールドを更新する方法と、これが良いアイデアかどうかを意味します。 –

関連する問題