2011-10-17 4 views
2

Je commence dans le monde de DD et je tente de construire une application assez simple. J'ai quelques questions sur la façon dont je choisis de modéliser mon domaine.meilleure façon de modéliser le scénario suivant

Mon application permet aux utilisateurs de commander des cartes de vœux. L'utilisateur peut commander n'importe quel nombre de cartes dans une commande. Lors du choix d'une carte à commander, ils parcourent le catalogue de cartes. Le catalogue de cartes n'est cependant pas stocké localement, il est récupéré d'un système externe, cependant chaque carte à laquelle il a navigué dans sa session actuelle sera mise en cache localement dans la base de données pour la durée de cette session. Lorsqu'ils ajoutent une carte à la commande, celle-ci est ajoutée à un nouvel élément de campagne. Ils doivent ensuite spécifier d'autres détails pour le poste de commande, la couleur, le message d'accueil, etc.

Ma question est la suivante: Comment modéliser la carte dans mon domaine. J'ai Order comme une racine agrégée, avec de nombreux éléments de campagne. Chaque élément de campagne aura certains attributs et une carte.

Cependant, mon catalogue de cartes aura également un concept de carte qui aura les mêmes propriétés que la carte sur ma ligne de commande. Ai-je raison de modéliser ces cartes en 2 entités distinctes (CatalogueCard et OrderCard) même si elles ont le même ensemble de propriétés?

La même question peut également être posée pour l'adresse à laquelle une carte doit être adressée (chaque article de campagne aura une adresse) et l'adresse de facturation pour la commande. Devraient-ils être modélisés comme des entités complètement distinctes?

Merci à l'avance

Répondre

1

Le fait que vous voyez des concepts d'entité commerciale répétée comme vous modelez votre domaine signifie que vous êtes probablement sur la bonne voie. Mais si vous avez deux objets avec le même ensemble d'attributs, vous devriez en utiliser un. CatalogCard et OrderCard doivent être des noms d'instance, et non des noms de classes, sauf si vous prévoyez des modifications, vous pouvez hériter d'une classe Card de base. Idem pour votre classe d'adresse. Utilisez simplement une classe d'adresse. Le type d'adresse doit simplement être un autre attribut qui pourrait être une valeur d'énumération des types d'adresses pris en charge par votre modèle.

+0

Merci pour votre réponse. Et si les cartes avaient un comportement différent. Disons, par exemple, qu'une carte de catalogue a une relation de 1 à plusieurs avec CardThemes, cependant une OrderCard ne peut avoir qu'un seul CardTheme, c'est-à-dire que l'utilisateur doit choisir 1 thème pour la commande. Souhaitez-vous modéliser cela en tant que BaseCard avec OrderCard en héritant de sa propre relation avec CardTheme? Je suppose que l'adresse est différente car elle n'a aucun comportement, l'adresse est vraiment un objet de valeur. Merci encore – user933709

+0

J'appellerais cela une règle métier au lieu d'un comportement et oui, l'héritage serait un bon moyen de le gérer. Mais avec votre exemple, cela pourrait être très simple car un seul thème pourrait toujours utiliser la même structure de données (collection/tableau) et être simplement contraint à 1 élément. Donc, dans cet exemple, vos classes dérivées de cartes ne différeraient que par des contraintes. –

Questions connexes