私のドメイン駆動型デザインプロジェクトで外部の第三者Webサービスを消費したいのですが、どのレイヤーで外部Webサービスにアクセスする必要があるのか理解できません。ドメインサービスでは、ドメインサービスはドメインオブジェクト専用であるため、そうは思わない。しかし、私の要件は、私は外部Webサービスからの入力に基づいて操作のリストを実行する必要がある、私はドメインサービスで別のタスクを実行する必要があります。私は混乱しています。ドメイン駆動型デザインでの外部Webサービスの使用
答えて
私はいくつかの操作を実行するために外部Webサービスを使用する必要があると思います。運用のためにあなたのビジネスロジックを意味するなら、私はあなたのビジネスロジックレイヤーに適切な場所があると思います。あなたの文脈では、それらを使うだけでいいです。 製品価格を計算するために必要な場合は、VATを計算する外部DLLにどこに電話をかけますか?
は、私はあなたが何ができるか
は、ドメインのプロジェクトであなたのドメインモデルの観点から必要なサービスへのインタフェースを導入している:-)それは理にかなって願っています。ドメインのクラスがサービスを必要とするたびに、このインターフェイスの実装への参照を渡します。
次に、このインターフェイスを実装し、使用する必要があるWebサービスに接続する「コネクタ実装」を作成します。アプリケーションを起動するときには、依存関係注入フレームワークを使用するなど、この実装をドメインクラスに提供します。
このコネクタには、ドメインモデルとWebサービス定義への参照があります。ドメインモデルには、コネクタ実装またはWebサービスへの参照がありません。ドメインプロジェクトで定義されたインタフェースのみを認識します。これは制御の反転と呼ばれます。
このように、ドメインクラスはWebサービスについては何も知らず、ドメインモデルで定義したインターフェイスについてのみ認識します。したがって、あなたのドメインロジックは、外界の「悪」から分離されたままです。前に述べたように
1)、のDomainServiceのいくつかの並べ替えを表すインターフェイスを作成し、Webサービスを呼び出し、具体的な実装を行います。
私は選択肢のカップルがあると思います。
2)何かが起きたときにサービスを呼び出す必要がある場合のみ。注文が確定したら「ドメインイベント」を使用することができます(http://www.udidahan.com/2009/06/14/domain-events-salvation/を参照)
Order.Confirm()メソッドはOrderConfirmedイベントを発生させ、イベントに応答してそこからWebサービスを呼び出します。 イベントハンドラとサービス参照は、ドメインレイヤを消費するアプリケーションレイヤに存在できます。
3)ウェブサービスの結果がドメインの概念であると考えられる場合、結果のエンティティと、このエンティティをWebサービスの結果から創造するリポジトリを作成して、外部データ。
実際に私は自分のアプリケーションのpaypal、authorize.netの支払い処理プログラムを作成したいと思います。私はそれを作成した、それはまた、IPaymentMethod、PaymentInfoのような実体をたくさん持っています。しかし、私は個別の集約を作成し、そこにすべてのエンティティを置いて、データでいっぱいのエンティティを取り出し、paypalまたはauthorize.netに渡してステータスメッセージを待つドメインサービスを作成するかどうかを判断できません。私がやること。支払い処理の部分は私のドメインの内部にあるのか、それとも結論できないのか。助けてください。 – chandra
IMO、あなたのドメインクラスがpaypalとauthorize.netに依存していない限り、あなたが選んだソリューションはどれも問題ありません。だから、支払い処理があなたのドメインの一部であるということになります:もしそうなら、paypal/auth.netの実装で実現できる適切な抽象とインターフェースを選択してください。あなたが正しい軌道に乗っているように聞こえます。依存関係を正しく取得すればさらに多くのことができます。 – Marijn
外部Webサービスにアクセスするには、新しいアプリケーションサービスが必要です。前述のように、サービス実装をドメインオブジェクトに組み込むことができます。
の「Domain Driven Design」の105ページを参照してください。あるいは、私の答えhereを見て、DDD内のさまざまな種類のサービスを理解してください。
アプリケーションサービスを作成してドメインオブジェクトに挿入するように指示しています。それは可能ですか?ドメインオブジェクトがアプリサービスにアクセスできるかどうか。どうやって ?他の人はドメインサービスで私に言います。ここで完全な混乱。 – chandra
@ Vijay私のドメインでは、広告主と出版社のエンティティがあります。私は広告主の一部である残高に広告主が資金を入金できるようにしたいと思います(PayPalの移転ファンド、エンティティ。 PayPalは、さまざまなパラメータを必要とします。これは、さまざまなエンティティを作成しています。たとえば、 - PaymentInfoの場合、PayPalや支払いゲートウェイに渡します。だからどこに私のドメイン内のすべてのエンティティを置くのですか?支払い集計を作成し、転送またはアプリケーション層でドメインサービスを作成しますか? – chandra
- 1. ドメイン駆動型デザインのレイヤー
- 2. ドメイン駆動型デザインの検索コンテキスト
- 3. ドメイン駆動型デザインのMVC .NETフォーム
- 4. ドメイン駆動型デザイン - 無差別クラス
- 5. .NETでドメイン駆動型デザインを適用するベストプラクティス?
- 6. ステートパターンとドメイン駆動デザイン
- 7. DDDドメイン駆動型デザインを使用する際のセキュリティを置く場所
- 8. 単純ドメイン駆動型デザインの貧血モデルとドメインモデル
- 9. エンティティとNHibernateの永続性を含むドメイン駆動型デザイン
- 10. ドメイン駆動型デザインが混乱しています
- 11. C#でのドメイン駆動型開発 - サンプルWebアプリケーション
- 12. ドメイン駆動型デザインクラスへのアクセスWCFサービスのライブラリ
- 13. UIデザイン:ウィザード駆動型アプリのテンプレート?
- 14. ドメイン駆動型設計のエンティティ
- 15. ドメイン駆動型デザイン:貧血ドメインの回避と実際の世界の役割のモデリング
- 16. ドメイン駆動型デザインでドメイン(名前空間)をどのように考慮しますか?
- 17. ポータブルデータベース駆動型Webアプリケーション
- 18. symfonyとドメイン駆動型設計
- 19. 目的Cドメイン駆動型設計
- 20. ASP.NET MVC 3でjQuery JSONリクエストを「ページレス」デザインで使用する、API駆動型デザインの欠点は何ですか?
- 21. ドメイン駆動型設計の原則に適用するベストプラクティス?
- 22. Wordpressを外部のRSSで駆動
- 23. Sql DB駆動型Webアプリケーションアーキテクチャの質問
- 24. ウェブアプリケーション用のデータ駆動型
- 25. ドメイン駆動のプログラミングとイベント
- 26. .netでドメイン駆動型デザインを学ぶための良いチュートリアルや書籍はありますか?
- 27. 外部Webサービス「内部エラー」
- 28. メッセージ駆動型とアプリケーション統合型のイベント駆動型アプローチ
- 29. ドメイン駆動型デザインでアプリケーションを構想するにはどうすればよいですか?
- 30. コンテンツ駆動型ウェブサイト用のベストWeb開発フレームワーク
問題を解決するには多くの方法があり、常に意見の違いがあります。元の質問に詳細を追加する必要がありますか? DOが必要なときにデータにアクセスするようにしたいのですか、または他のトリガーによって提供されるデータですか?詳細をご記入ください。 –