8
votes

Conception d'applications - Tables de base de données et interfaces

J'ai une base de données avec des tables pour chaque entité du système. par exemple. Personnière a des colonnes personnalisées, nom, homestateid. Il existe également une table pour «données de référence» (c'est-à-dire des états, pays, toutes les devises, etc.) données qui seront utilisées pour remplir les zones de liste déroulante. Cette table de référence sera également utilisée pour que la personne familiale soit une clé étrangère à la table de référence.

Dans l'application C #, nous avons des interfaces et des classes définies pour l'entité. par exemple. PersonImployationClass: iPersonInterface. La raison d'avoir les interfaces pour chaque entité est que la classe d'entité réelle stockera des données différemment en fonction d'un produit tiers pouvant changer.

La question est que l'interface doit avoir des propriétés pour nom, homestatedid et homestaténame (qui seront extraites de la table de référence). Ou si l'interface n'expose-t-elle pas la structure de la base de données, c'est-à-dire pas chez l'habitat et avoir un nom, un nom d'accueil?


0 commentaires

3 Réponses :


5
votes

Je dirais que vous êtes sur la bonne voie lorsque vous pensez aux noms de propriété!

Modèle vos cours comme vous le feriez dans le monde réel.

Oubliez les modèles de base de données et la dénomination des conventions de clés StateID et étrangères en général. Une personne a une ville, pas un Villeid.

Ce sera jusqu'à votre couche de données pour mapper et peupler les propriétés de ces objets au moment de l'exécution. Vous devriez avoir la liberté d'exprimer votre intention et la représentation des objets «du monde réel» dans votre code, et ne pas être bloqué à votre mise en œuvre de la DB.


0 commentaires

3
votes

de toute façon est acceptable, mais ils ont tous les deux leurs avantages et leurs inconvénients.

La première voie (les entités ont des identifiants) sont analogues au modèle activeCord , où vos entités sont des wrappers minces sur la structure de la base de données. Ceci est souvent un moyen flexible et rapide de structurer votre couche de données, car vos entités ont une liberté de travailler directement avec la base de données pour accomplir des opérations de domaine. L'inconvénient est que lorsque le modèle de données change, votre application aura probablement besoin d'une maintenance.

La deuxième manière (les entités reflètent davantage une structure réelle) sont plus analogues à un cadre d'entité plus lourd ou à l'hibernate . Dans ce type de couche d'accès aux données, votre cadre de gestion de l'entité s'occuperait de cartographier automatiquement les entités dans la base de données. Cela sépare plus proprement l'application des données, mais peut être beaucoup plus plongée à traiter.

C'est un gros choix et ne devrait pas être pris à la légère. Cela dépend vraiment de vos exigences et de vos besoins de votre projet, qui va le consommer.


0 commentaires

0
votes

Cela peut aider à séparer le design un peu.

Pour chaque entité, utilisez deux classes:

  • un qui traite des opérations de base de données sur l'entité (où vous mettrez des identifiants)
  • un qui est un simple objet de données (où vous auriez des champs standard qui signifient quelque chose)

    Comme @womp mentionné, si votre entité persistance ne sera qu'au lieu de bases de données, fortement considérer l'utilisation d'une orje afin que vous ne finissez pas de rouler le vôtre.


0 commentaires