【问题标题】:Domain / Object Model Design Question领域/对象模型设计问题
【发布时间】:2011-08-19 12:44:02
【问题描述】:

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

任何想法或建议都会很棒!

【问题讨论】:

    标签: .net domain-driven-design domain-model object-model


    【解决方案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)

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

    【讨论】:

    • 这是正确的。所以从细节的角度来看,在故事或其他表格中添加投票标志是否有意义?
    • 那么 AddToBallot() 去哪儿了?
    • 将我的 cmets 编辑为上述答案。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    相关资源
    最近更新 更多