2010-07-26 28 views
2

Lors de la création d'un modèle de domaine, nous avons presque toujours un champ ou une propriété Id pour nos entités qui représente la colonne de clé primaire de la table correspondante dans la base de données. Ma question est - si j'ai cette propriété clé que n'a rien à voir avec le modèle de domaine (en d'autres termes, c'est juste une question de base de données, Martin Fowler préfère le nommer), est la couche de persistance qui fuit dans mon domaine ? Et si c'est le cas, comment puis-je l'empêcher?Est-il mauvais d'avoir des clés sans signification dans mes classes de modèle de domaine?

Répondre

1

Du grand livre intitulé: Database Systems - Le livre complet.

touches sont des attributs ou des ensembles d'attributs qui identifient de façon unique une entité au sein de son jeu d'entités. Aucune entité ne peut être d'accord sur leurs valeurs pour tous les attributs qui constituent une clé. Il est permis, cependant, pour deux entités de s'entendre sur certains, mais pas tous, des attributs.

-

Notre expérience [...] pourrait nous amener à croire qu'il est difficile de trouver des clés ou assurez-vous que l'ensemble des attributs constitue une clé. En pratique, la question est généralement beaucoup plus simple. Dans les situations du monde réel couramment modélisées par les bases de données, les gens font souvent des pieds et des mains pour les ensembles d'entités. Par exemple, les entreprises attribuent généralement les ID des employés à tous les employés, et ces identifiants sont soigneusement choisis pour être des numéros uniques. Un de ces identifiants est de s'assurer que dans la base de données de l'entreprise chaque employé peut être distingué de tous les autres, même s'il y a plusieurs employés avec le même nom. Ainsi, l'attribut ID employé peut être utilisé comme clé pour les employés de la base de données.

Il est vrai que les entités ne diffèrent que par l'insertion artificielle ID peut introduire des données en double, leur utilisation est loin (redondants) de sens. Un moyen supplémentaire de distinguer les différentes entités du domaine n'interfère pas, à mon avis, avec le domaine lui-même.

Mais comme une réponse à votre question:

est-couche de persistance infiltrant dans mon domaine? Et si c'est le cas, comment puis-je l'empêcher?

Si vous voulez vraiment, vraiment. Vous pouvez utiliser une combinaison d'attributs d'entité pour définir les clés d'entité.

Espérons que ça aide.

3

Regardez le problème d'une autre façon: Will cacher les clés primaires rendent plus facile pour votre équipe pour développer la solution, ou le rendre encore plus difficile ? Ne vous inquiétez pas de la fuite des valeurs PK dans vos entités. Je suis sûr que votre logiciel a des problèmes plus importants qui doivent être résolus.

1

Assurez-vous que les clés significatives sont également identifiées dans le modèle. L'inclusion des substituts peut être facultative, mais inclure les clés significatives qui donnent un sens à vos données dans le monde réel est beaucoup plus important.