Finora ho scritto molte app web di database (MySQL) ma penso sempre che la mia struttura sia un po 'goffa. Voglio migliorare il modello di programmazione / progettazione che utilizzo, sperando in qualche consiglio qui. In particolare, non riesco a trovare una struttura che integri un approccio OOP che incapsuli l'implementazione del database (schema). io
Penso che la mia domanda possa essere meglio spiegata con l'esempio. Ci sono 2 approcci che uso ora dicono che ho un oggetto / classe Invoice:
il primo è usare le funzioni statiche dei membri
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);
};
Il secondo approccio consiste nel mettere ogni cosa in un oggetto database:
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...
}
Trovo che in entrambi i modi le funzioni del membro (SQL) siano molto inseparabili dalla "vista", in quanto la "vista" determina ciò che le classi devono avere e quindi sembra infrangere l'architettura documento / vista.
Inoltre, sembra in qualche modo inefficiente, ad esempio un'istruzione SELECT dovrebbe selezionare solo ciò che è necessario, ma la presenza di variabili membro in Fattura sembra implicare "dati garantiti".
Non so se ho spiegato chiaramente la domanda, quali sono alcuni altri migliori approcci a questa architettura / modello di progettazione / che cosa è noto?
Grazie per i consigli