1

例によってドメイン駆動設計を学ぼうとしていますが、アドバイスが必要です。Tender というエンティティがあるとします。外部サービスから SOAP メッセージを受信しました。メッセージには入札に関するすべての情報が含まれています(tenderId、tenderSum、...)

私がしなければならないこと:

  1. Soap Web Service でメッセージを受信し、メッセージをメッセージ キューに入れる - Serviceによって行われる
  2. キューからメッセージを取得 -サービスによって実行
  3. Database に移動し、tenderId で Tender オブジェクトを取得するか、新しい Tender を作成します -リポジトリで行います
  4. Tender オブジェクトのフィールドに Message からの値を入力します - Domain Object Tenderによって行われます
  5. 入札をデータベースに保存 -リポジトリで実行

正しい方法で実行しようとしましたが、最終的に、ほとんどのコードがサービス、リポジトリなどに存在することがわかりました。本当に混乱しています。私は何を間違えましたか?ドメインオブジェクト内でこれらすべてを行う必要がありますか?

4

3 に答える 3

3

DDD の一部のエンティティ/値オブジェクトがほとんど動作しないことは珍しくありません。どのプロジェクトでも、いくつかの構築ロジックのみを持ち、不変であるエンティティ/VO が少なくともいくつかあることはほぼ確実です。これらは DDD の主な関心事ではありません。

代わりに、境界付けられたコンテキストと集合体を特定して (再) 定義することに集中する必要があります。これについては、ウェブ上で多くの情報を見つけることができます ( dddcommunityは開始するのに適した場所ですが、Eric Evans、Udi Dahan、Greg Young から見つけられるすべてのビデオを少なくとも数回見ることを強くお勧めします)。

そして、あまり心配しないでください - あなたがどんなに上手でも、それを正しくするためにいくつかの失敗が必要です:)

于 2011-11-02T09:15:38.207 に答える
2

多くの場合、サービスに含まれるすべてのものは、モデルが進化するにつれて変化します。あなたの例では、1 つのオプションとして、エンティティのメソッド メンバーに名前を付けることが考えられますTender.LoadValuesFrom[ServiceName](val1, val1, etc)(サービス名がドメイン内で意味を持つ場合)。

このようにして、少なくともエンティティに独自の値をロードする責任を負わせます。奇妙なサービスが貧弱に見えることがあります。それがいたるところで起こっている場合、または非常に気まずい場合は、おそらく何かを伝えようとしています. そうでなければ、私はそれについてあまり強調しません。

于 2011-11-01T21:17:12.330 に答える
1

この種の考えを持っているのはあなただけではないと思います。私のモデルでは通常、検証と集計管理が行われます。また、値オブジェクトにも重点を置いています。自動プロパティを最小限に抑えるようにしてください。考えずに急速な開発に招待されます...これについては、以前ブログに記事を書きました... http://magnusbackeus.wordpress.com/2011/05/31/preventing-貧血ドメインモデルの場所は私のモデルの振る舞い/

しかし、これは反復作業であり、適切なモデルを見つけます。多くのリファクタリングを行う準備をしてください...

于 2011-11-02T11:21:59.737 に答える