2

次のアプリケーションには DDD を使用することを考えています。私はすでに多くの興味深い論文と回答を見つけましたが、私の問題の解決策を見つけることができません:

SOAがあります。一部のサービスがデータのマスターとして知られているアーキテクチャ。それは素晴らしいことですが、DDD でうまく使用する方法がわかりません。

データのマスターであるサービス「従業員」を考えるとEmployee、いくつかの単純な値 (名と姓、生年月日、住所) に対するクラッドです。私の新しいアプリは、それらの従業員に提供されるトレーニングを追跡する必要があります。だから私は の概念を持っています。a はParticipant、トレーニングとスキルのリストに加えParticipantて、同じ値を持ちます。Employee

「トレーニング」アプリケーションには、 を含む参加者のテーブルを含むデータベースがありparticipant_id、名前と姓を取得するために使用されるskillデータベースがあると想定できます。employee_id

私は正しいですか?

しかし今、どのコンポーネントを使用して「従業員」サービスを呼び出すことができますか? 私ParticipantRepositoryが参加者を取得したときに私が持っているのは名前です。それとも、Participantデータを使用する前にデータを完成させるのはアプリケーション サービスですか。または、必要に応じて従業員サービスを明示的に呼び出すことができますか?

どうもありがとう。

4

1 に答える 1

2

トレーニング アプリケーション (つまり、アプリケーションのドメイン) では、従業員の概念は外部参照以外には存在しない場合があります。あなたが正しく言ったように、それは参加者になります。

参加者を入力するために従業員サービスからデータを取得する必要があることを理解しています。いくつかのオプションを考えることができます。

1) ParticipantRepository は、集計ルートである Participant を構築します。そのデータの一部は、PersonalDetails値オブジェクトにある場合があります。この値オブジェクトは、従業員アプリを呼び出すことによって構築されます。このアプローチは簡単ですが、最適ではない可能性があります。PersonalDetailsServiceこれは、ParticipantRepository がインターフェイスを呼び出し、そのインターフェイスの実装が Employee サービスへの実際の呼び出しを行う、あなたが言及したアプローチです。このように、ドメインは PersonalDetails のみを参照するため、従業員を扱っていることを認識しません。

2) 従業員サービスからデータを複製することによる結果整合性: 従業員が更新されたときに従業員サービスが通知を送信できる場合 (メッセージングなどを介して)、それらのイベントをリッスンし、データの読み取り専用コピーを取得できます。これの利点は、従業員サービスがダウンしてもアプリが機能することです。問題は、失われた可能性のあるデータを再送信するために何かを構築する必要がある場合があることです。

これらのアプローチはどちらも、ドメイン駆動設計の実装という本で非常によく説明されています。

于 2016-01-25T11:17:04.037 に答える