2010-09-20 4 views
0

Je crée un logiciel pour ma bibliothèque d'amis. Pour l'instant j'ai une table dans la base de données pour les livres et les films, mais disons que l'utilisateur voudrait ajouter des CD aussi. Ensuite, je devrais laisser l'utilisateur créer une table dans la base de données pour les CD. La conception jusqu'à présent consiste à avoir une classe pour chaque table dans la base de données, avec ses champs, et des méthodes pour insérer et mettre à jour les données dans la base de données (C# et mysql). Comment pourrais-je aller de l'avant et faire une classe "générale" pour toutes les tables de la base de données, et non pour chaque spécifique comme je le fais maintenant.Avoir une classe pour chaque table de la base de données

Je cherche un nom sur un motif ou quelque chose comme ça, pas un tutoriel complet en réponse.

Merci :)

+1

Qu'est-ce que vous faites est bon. C'est essentiellement ce que fait chaque ORM. Je ne fusionnerais pas toutes les tables en un seul objet (comment représenterais-tu les relations?). Jetez un oeil à opf3 (http://opf3.codeplex.com/) qui est un ORM pour MySQL + .NET – halfdan

+0

Pour fusionner toutes les tables dans un seul objet est une sorte de ce que je demande. Y a-t-il un nom de modèle faisant que je peux google? Je représente les relations dans la couche logique, ne sais pas si c'est la façon de le faire. Dans la couche logique, je suis en quelque sorte un puzzle des classes de couches de données. – Johannes

+0

Oups, c'était une faute de frappe. Je voulais dire "je ne fusionnerais pas" – halfdan

Répondre

0

Vous pouvez le faire en utilisant la carte ou le dictionnaire. En mots simples en utilisant des paires nom/valeur. Mais c'est un mauvais design pour ce que vous faites. Cela va rendre les choses difficiles pour vous et gérer aussi bien.

Je sais ce que vous pensez de devoir écrire les mêmes méthodes encore et encore pour toutes les tables. Dans ce cas, vous devriez utiliser une sorte de ORM (Object Relation Mapping). Pour Java, vous pouvez utiliser Hibernate, Toplink. NHibernate est un port d'Hibernate dans .Net.

+0

Merci, je vais regarder dans cela. Je ne suis pas si inquiet de devoir écrire les mêmes méthodes encore et encore, mais que se passe-t-il si l'utilisateur ajoute quelque chose de nouveau à sa bibliothèque pour laquelle je n'ai pas de classe/table. – Johannes

+0

Ces classes peuvent également être générées automatiquement. Vous pouvez faire en sorte que la génération automatique fasse partie du processus de construction afin que votre build soit toujours compatible avec la base de données pour laquelle la construction est ciblée. –

0

Vous pouvez utiliser quelque chose qui s'appelle STI: héritage de table unique. Il est adapté à des endroits comme celui-ci, je suppose, où un certain nombre d'attributs sont partagés, et certains sont séparés.

Donc vous pouvez créer une table, appelez-la LibraryItem, et elle a un type, qui pourrait être CD, book, dvd et un titre, et quelques champs qui seront remplis pour un certain type et vides pour d'autres.

Normalement, il est préférable de créer des tableaux séparés pour chacun, mais parfois l'approche STI est plus flexible. Vous pouvez facilement ajouter un nouveau type: par ex. LP ou VHS, tant qu'il n'introduit pas trop de nouveaux attributs/champs.

Questions connexes