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
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.
la source
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 .
la source