2011-08-19 112 views
0

我有一個故事,可以有一個分配給它的分子。分子可以分配到多個故事。提名者可以將故事移到他們的選票上(而不是一個故事只能屬於他們的提名者選票)。過去我一直在做數據驅動的應用程序,所以不幸的是我已經在考慮如何處理投票了。由於Story表具有分配給它的分配者id,因此向表中添加IsBallot標誌是有意義的。但是現在在我的實際領域設計中,這個故事有一種行爲可以增加自己的選票(這看起來很奇怪,因爲有關於這個提名者的規則)。我想它可以問提名人是否可以加入選票。我的第二個選擇是有另一個表StoryBallot,其中包含提名者ID和故事ID。這裏有什麼奇怪的是,這個故事已經包含了提名者ID,這個新表也有它。域名/對象模型設計問題

任何想法或建議將是偉大的!

回答

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

+0

這是正確的。所以從細節的角度來看,將故事或其他表格添加投票標誌是否有意義? – Marco

+0

那麼AddToBallot()去哪了? – Marco

+0

編輯我的意見到上面的答案。很高興我能幫上忙。 –