0

1 つの推薦者を割り当てることができるストーリーがあります。指名者は複数のストーリーに割り当てることができます。推薦者は、ストーリーを自分の投票に移すことができます (ストーリーは推薦者の投票にのみ属することができるわけではありません)。私は過去にデータ駆動型のアプリをずっとやっていたので、残念ながら投票の処理方法についてはすでに考えています。Story テーブルには nominator id が割り当てられているため、IsBallot フラグをテーブルに追加するのは理にかなっています。しかし今、私の実際のドメイン設計では、ストーリーはそれ自体を投票に追加する動作をしています (これには指名者に関連付けられたルールがあるため、これは奇妙に思えます)。投票に自分自身を追加できるかどうか、指名者に尋ねることができると思います。2 番目のオプションは、指名者 ID とストーリー ID を含む別のテーブル StoryBallot を用意することです。

どんなアイデアや提案も素晴らしいでしょう!

4

1 に答える 1

1

私が正しく理解している場合、ドメインは次のようにモデル化できます。

- A Nominator has stories
- A Nominator can nominate Stories for a Ballot

- A Ballot knows all its Stories and their respective Nominator

- A Story knows its Nominator

ドメイン駆動設計を使用すると、テーブルはまったく考えられません。Aggregate や、場合によっては Bounded Contexts も考えられます。しかし、物事を複雑にしすぎないように、集約レベルにとどめておきます。

2 つの集約ルートを持つことができます。

1. Nominator (who knows all their stories)
2. Ballot (which knows all their nominated stories as 
   well as the respective nominators)

ストーリー自体には直接アクセスすることはできず、それぞれ推薦者または投票を通じてのみアクセスできるようになるでしょう。

ストーリーが、指名者によって所有されたり、投票に指名されたりせずに存在する理由はありますか? そうでない場合は、それ自体でアクセスできないようにし、eg のみを公開しますNominator.GetStories()Nominator.GetNominatedStoriesFor(ballot)および/またはBallot.GetStories()

ストーリーを投票に追加するには、公開するNominator.NominateStory(storyId, ballotId)か、Ballot.Add(storyId).

データベースに保存する場合は、とを含むテーブルNominatedStoriesと、ストーリーの詳細とballotIdstoryIdStoriesnominatorId

于 2011-08-19T13:00:51.547 に答える