0

我有一个故事,可以分配一个提名人。可以将提名人分配给多个故事。提名人可以将一个故事移到他们的选票上(不是一个故事只能属于他们的提名人选票)。我过去一直在做数据驱动的应用程序,所以不幸的是我已经在考虑如何处理选票了。由于 Story 表具有分配给它的提名者 ID,因此将 IsBallot 标志添加到表中是有意义的。但现在在我的实际域设计中,故事有一种将自己添加到选票中的行为(这似乎很奇怪,因为在这方面有与提名人相关的规则)。我想它可以询问提名人是否可以将自己添加到选票中。我的第二个选择是拥有另一个包含提名者 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

使用领域驱动设计,我们根本不会想到表格。我们会想到聚合,甚至可能会想到有界上下文。但为了不使事情过于复杂,我将把它保持在聚合级别:

我们可以有两个聚合根:

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

故事本身可能根本无法直接访问,而只能分别通过提名人或选票访问。

一个故事没有被提名人拥有或被提名投票,是否有理由存在?如果不是,则使其无法自行访问,并且仅公开例如Nominator.GetStories()Nominator.GetNominatedStoriesFor(ballot)和/或Ballot.GetStories()

要在选票中添加故事,我会公开Nominator.NominateStory(storyId, ballotId)Ballot.Add(storyId).

当谈到在数据库中存储时,我可能会有一个NominatedStories带有ballotIdstoryId的表,以及一个Stories带有故事细节的表和nominatorId

于 2011-08-19T13:00:51.547 回答