1

チーム、開発者、およびチームが実行するタスクがある DDD を使用してシナリオをモデル化しようとしています。

基本的に、私は次のことを想定しています。

  • Team実体である (例えば、新しい開発者を参加させることによって変化する可能性があるため)
  • Developerエンティティでもあります(どの開発者が何をしたかが重要です)
  • Storyエンティティです (たとえば、ワーク アイテムをストーリーに予約することによって変更される可能性があるため)
  • Work値オブジェクトです(一度変更すると変更できないため)

非常に明白なのは、エンティティTeamを含む集合体であることです。Developerまた、値オブジェクトStoryを含む集約です。Work

したがって、最初は次のコードから始めます。

var team = Team.FoundTeam();
team.WelcomeDeveloper("John Doe");
team.WelcomeDeveloper("Jane Doe");

var story = Story.WriteDownStory("Publish website");
story.AssignTeam(team);

ここまでは順調ですね。さて、次のステップでは、ストーリーの作業を請求したいと思います。基本的に、これは次のように簡単です。

story.ChargeWork(new TimeSpan(2, 0, 0));

残念ながら、この作業は開発者に割り当てる必要があります。そして、これが私の問題です。これをどのようにモデル化すればよいでしょうか? 私ができないことは次のとおりです。

story.ChargeWork("Jane Doe", new TimeSpan(2, 0, 0));

同じ名前の開発者が 2 人いる場合、これは失敗します。特定の開発者エンティティにアクセスせずに割り当てるにはどうすればよいですか (開発者はTeam集約ルートを使用してのみアクセスできるため)。

これに関するヒントはありますか?

私のモデルは完全に壊れていますか、それとも何か重要なものが欠けていますか?

4

2 に答える 2

3

ID を参照として使用できます。

var jane = developer.findByName('Jane Doe');
story.ChargeWork(jane.id, new TimeSpan(2,0,0));
于 2013-05-02T08:41:12.950 に答える
1

モデルが壊れているかどうかは、ドメインの専門家以外誰も教えてくれませんが、IMO が飛び出すいくつかのことは言えます。

チームは、開発者をグループ化する集約ルート (集約ではありません) です。ただし、チームの境界付けられたコンテキストでの開発者の定義は、ID と関連する動作のみを意味する場合があります。つまり、独自の境界付けられたコンテキスト (チーム外) の集約ルートである同じ開発者エンティティではありません。

これで、Team エンティティが一意の開発者を強制するのは非常に簡単になりました。また、チームはストーリーの代わりに開発者に請求するべきだと思います (請求の意味がまだわかりません)。

技術的なルール (X はエンティティ、Y は値オブジェクト、リポジトリが必要など) の適用を開始すると、モデルは実際のプロセスに厳密に従う必要があります。間違った道を進んでいます。

于 2013-05-02T08:46:10.580 に答える