He escrito muchas aplicaciones web de bases de datos (MySQL) hasta ahora, pero siempre creo que mi estructura es un poco torpe. Quiero mejorar el patrón de programación / diseño que uso, esperando algún consejo aquí. Particularmente, no puedo encontrar una estructura que complemente un enfoque OOP que encapsule la implementación de la base de datos (esquema). yo
Creo que mi pregunta puede explicarse mejor con un ejemplo. Hay 2 enfoques que uso ahora y digo que tengo un objeto / clase Factura:
primero es usar funciones miembro estáticas
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);
};
El segundo enfoque es poner todo en un objeto de base de datos:
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...
}
Me parece que en ambos sentidos las funciones miembro (SQL) son muy inseparables de la "vista", ya que la "vista" determina lo que las clases deben tener y, por lo tanto, parece romper la arquitectura de documento / vista.
Además, parece un poco ineficiente, por ejemplo, una instrucción SELECT solo debe seleccionar lo que se necesita, pero la presencia de variables miembro en Factura parece implicar "datos garantizados".
No sé si expliqué la pregunta claramente: ¿Cuáles son algunos de los mejores enfoques para esta arquitectura / patrón de diseño / cómo se conoce?
Gracias por los consejos