2011-08-19 1 views
0

J'ai une histoire qui peut être associée à un nominateur. Un nominateur peut être affecté à plusieurs histoires. Le nominateur peut déplacer une histoire à son bulletin de vote (pas une histoire ne peut appartenir à leur bulletin de vote). J'ai toujours fait des applications basées sur les données par le passé, donc malheureusement je réfléchis déjà à la façon de gérer le vote. Comme la table Story est associée à un identificateur de nominateur, il est judicieux d'ajouter un indicateur IsBallot à la table. Mais maintenant dans ma conception de domaine actuelle, l'histoire a un comportement à ajouter à un bulletin de vote (ce qui semble étrange car il y a des règles liées au nominateur à ce sujet). Je suppose qu'il pourrait demander au nomintaor s'il peut s'ajouter au bulletin de vote. Ma deuxième option est d'avoir une autre table StoryBallot qui contient l'identifiant du nominateur et l'identifiant de l'histoire. ce qui est bizarre ici est l'histoire contient déjà le nominateur id et cette nouvelle table l'a aussi.Création d'un modèle de domaine/d'objet Question

des idées ou des suggestions serait génial!

Répondre

1

Si je comprends bien votre domaine pourrait être modélisé comme ceci:

- 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 

En utilisant Domain-Driven Design nous pas penser à des tables du tout. Nous pensons aux agrégats et peut-être même aux contextes bornés. Mais pour ne pas trop compliquer les choses, je vais le garder au niveau agrégé:

Nous pourrions avoir deux racines: Aggregate

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

L'histoire elle-même peut-être ne serait pas directement accessible à tous, mais seulement par le nominateur ou le bulletin de vote, respectivement.

Y a-t-il une raison pour qu'une histoire existe sans appartenance à un nominateur ou nomination à un bulletin de vote? Si ce n'est pas le cas, rendez-le inaccessible par lui-même et n'exposez que par ex. Nominator.GetStories(), Nominator.GetNominatedStoriesFor(ballot) et/ou Ballot.GetStories()

Pour ajouter une histoire à un bulletin de vote, soit j'exposerai Nominator.NominateStory(storyId, ballotId) ou Ballot.Add(storyId).

En ce qui concerne le stockage dans une base de données, je devrais probablement une table NominatedStories avec ballotId et storyId et une table Stories avec des détails de l'histoire et nominatorId

+0

qui est correct. Donc, d'un point de vue détaillé, est-ce qu'il serait logique d'ajouter un drapeau de scrutin à l'histoire ou à une autre table? – Marco

+0

alors où AddToBallot() va-t-il? – Marco

+0

Édité mes commentaires dans la réponse ci-dessus. Heureux d'avoir pu aider. –