Meilleures pratiques: modèles de programmation d'applications de base de données

11

J'ai écrit de nombreuses applications Web de base de données (MySQL) jusqu'à présent, mais je pense toujours que ma structure est un peu maladroite. Je veux améliorer le modèle de programmation / conception que j'utilise, en espérant quelques conseils ici. En particulier, je ne trouve pas de structure qui complète une approche POO qui encapsule l'implémentation de la base de données (schéma). je

Je pense que ma question peut être mieux expliquée par l'exemple. Il y a 2 approches que j'utilise maintenant dire que j'ai un objet / classe Invoice:

la première consiste à utiliser des fonctions membres statiques

class Invoice
{
   int id;
   string ref;
   int customer_id;
   date created;
   date due;

   static id create();
   static bool update(id, field1, field2, ...);
   static bool delete(id);
   static bool get(id);
};

La deuxième approche consiste à mettre tout dans un objet de base de données:

class Database extends ProprietaryDBConnecter, Singleton
{
   id createInvoice();
   bool updateInvoice(id, field1, field2, ...);
   bool deleteInvoice(id);
   bool getInvoice(id);

   id createCustomer();
   bool updateCustomer(id, field1, field2, ...);
   bool deleteCustomer(id);
   bool getCustomer(id);

   // etc...
}

Je trouve que dans les deux sens, les fonctions membres (SQL) sont très indissociables de la "vue", en ce que la "vue" détermine ce que les classes doivent avoir et semble donc rompre l'architecture document / vue.

En outre, il semble plutôt inefficace, par exemple, une instruction SELECT ne devrait sélectionner que ce qui est nécessaire, mais la présence de variables membres dans Invoice semble impliquer des "données garanties".

Je ne sais pas si j'ai expliqué clairement la question: Quelles sont les autres meilleures approches de cette architecture / modèle de conception / ce que l'on appelle?

Merci pour les conseils

Jake
la source

Réponses:

14

Eh bien, je suppose que vous pourriez utiliser un ORM.

Mais vraiment, la conception de la base de données ne doit PAS suivre les principes de la POO, elle doit suivre les principes de conception de la base de données tels que la normalisation. Et il doit être conçu dans la base de données et non dans l'application. Et les règles d'intégrité des données doivent être appliquées au niveau de la base de données et non par l'application.

Je vous suggère de lire quelques livres sur la conception de bases de données et, ensuite, de lire sur le réglage des performances de la base de données de votre choix.

HLGEM
la source
5
+1 pour tout ne doit pas être OOP (même si certains ORM sont assez sympas!)
Javier
1
Les O / RM sont agréables, mais leur utilisation ne signifie pas que vous ne pouvez pas vous conformer à une bonne conception de base de données.
BlackICE
1
@ David, je suis d'accord que c'est vrai entre les mains de quelqu'un qui sait ce qu'il fait. Et je lui ai suggéré de regarder un ORM, mais vraiment si vous ne connaissez pas d'abord la conception de la base de données, un ORM est un outil dangereux.
HLGEM
C'est un bon point que les règles d'intégrité des données peuvent être appliquées au niveau de la base de données. Cependant, il est parfois judicieux de mettre certaines règles (telles que «le projet doit toujours contenir plus de 5 membres de l'équipe») dans l'application si les règles sont susceptibles de changer, et seule l'application modifie les données.
Jon Onstott
L'application n'est presque jamais la seule chose qui modifie les données. Les règles métier qui ne sont pas insérées dans la base de données ont tendance à être violées très facilement lorsque quelqu'un a besoin de modifier rapidement un gros morceau de données pour prendre en charge certaines corrections de données.
HLGEM
10

Je ne trouve pas de structure qui complète une approche POO qui encapsule la mise en œuvre de la base de données

On dirait que vous décrivez le décalage d'impédance relationnelle-objet .

Il y a un certain nombre de choses qui sont censées résoudre cet OODBMS, les outils ORM, une foule d'outils d'accès aux données.

Je pense que le fait qu'il y ait tant de solutions me porte à croire que One True Solution ™ n'existe pas.

Ainsi, vous pouvez choisir n'importe quelle direction que vous souhaitez en sachant que certaines personnes le détesteront et d'autres l'adoreront.

Conrad Frix
la source
On dirait que c'est, d'une manière plus rigoureuse.
Jake
2

Si vous ne souhaitez pas utiliser un wrapper ORM, utilisez une base de données qui prend en charge le stockage de style OOP comme MongoDB .

MongoDB (de « hu mongo nous ») est une multiplateformes base de données orientée document système. Classée comme base de données " NoSQL ", MongoDB évite la structure de base de données relationnelle traditionnelle basée sur une table au profit de documents de type JSON avec des schémas dynamiques (MongoDB appelle le format BSON ), ce qui rend l'intégration des données dans certains types d'applications plus facile et plus rapide. ..

Josh K
la source