2010-10-20 3 views
0

Désolé si c'est noobish, mais je suis nouveau au développement et apprends moi-même.La structure de la structure de base de données miroir doit-elle être définie dans la classe?

Disons que j'ai 2 tables

BioData
Nom (chaîne)
Date de naissance (datetime)
Sanguin (int)

BloodTypes
BloodTypeId (int)
BloodTypeName (string)

Lorsque je tire un enregistrement, je vais utiliser une jointure, de sorte que je tire le BloodTypeName et pas seulement ID.

Maintenant, si mon miroir de structure de classe de ces tables, ou suis-je sûr de construire une classe « personne »

public class Person { 
    string Name; 
    DateTime Birthdate; 
    string BloodType; 
} 

Si je ne classe de construction comme indiqué ci-dessus, il semble que je devrais faire un peu de funk quand il s'agit d'insérer des enregistrements dans DB parce que je veux montrer BloodTypeName à l'utilisateur, mais je dois insérer l'entier pertinent dans la DB.

Tout aperçu des meilleures pratiques serait apprécié.

Répondre

2

Non, il ne devrait certainement pas refléter la structure de la base de données, si vous avez une bonne raison de ne pas le faire.

Parfois, les classes de données reflètent exactement la base de données, mais ce n'est pas parce qu'elles doivent être identiques, c'est simplement parce qu'il n'y a aucune raison de les rendre différentes. Rendre les classes miroir de la base de données permet une couche de données plus simple, mais dès qu'il y a une raison de modéliser les classes différemment, vous devez considérer si la mise en miroir de la base de données rend plus difficile l'utilisation des classes.

Dans ce cas, il est clairement moins efficace si vous devez obtenir le nom du groupe sanguin dans une opération distincte. Vous pourriez vouloir une classe de groupe sanguin en plus de la classe de personne (par exemple si vous voulez remplir une liste déroulante avec tous les groupes sanguins possibles), mais quand vous récupérez les données pour l'objet personnel, vous devriez également aller chercher le nom du groupe sanguin.

Vous pouvez chercher aussi bien l'identification et le nom du type de sang ainsi que les données de la personne, et de créer un objet de type sanguin pour stocker dans l'objet personne:

public class BloodType { 
    int Id; 
    string Name; 
} 

public class Person { 
    string Name; 
    DateTime Birthdate; 
    BloodType BloodType; 
} 
+0

Il semble dans ce cas, reflétant la structure db est plus efficace. – andrewheins

+0

@andrewheins: Cela dépend de la façon dont vous allez utiliser les classes. S'il n'y a aucune raison d'avoir une classe de groupe sanguin distincte, vous ne devriez pas en créer une simplement parce que la base de données ressemble à cela. – Guffa

0

Je voudrais séparer entre l'affichage des classes et des classes de données.

Les classes de données doivent avoir toutes les informations présentes dans la base de données pour pouvoir les modifier. Maintenant, si vous voulez afficher des informations spécifiques à l'utilisateur, vous pouvez écrire des classes d'affichage, qui ont juste les informations spécifiques nécessaires. Ensuite, il vous suffit de les mapper - soit vous-même ou en utilisant une bibliothèque, comme automapper, je l'utilise moi-même et c'est très pratique, et prend beaucoup de charge de travail de vos épaules.

0

Je suppose que vous utilisez un système de SGBDR pour votre base de données et vous utiliserez une méthodologie de POO pour votre structure de classe. Si vous respectez les principes fondamentaux de ces 2 méthodes, tout ira bien.

Il n'est pas nécessaire de mélanger ces approches. Donc => ne pas refléter ces structures. Vous allez bien construire une classe Person de cette façon.

-1

Hay andrew .. Oui, il doit refléter la structure DB,

Si vous encore à apprendre la chose que vous pourriez commencer à lire à propos LINQ Tech, qui font presque la majeure partie du travail que vous demandez au sujet, l'espoir aidé, Cordialement ..

Questions connexes