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
Parece que estás describiendo el desajuste de impedancia relacional del objeto .
Hay varias cosas que se supone que resuelven este OODBMS, herramientas ORM, una gran cantidad de herramientas de acceso a datos.
Creo que el hecho de que haya tantas soluciones me lleva a creer que One True Solution ™ no existe.
Por lo tanto, puede elegir cualquier dirección que desee con la seguridad de que algunas personas lo odiarán y otras lo amarán.
fuente
Si no desea usar un contenedor ORM, use una base de datos que admita el almacenamiento de estilo OOP como MongoDB .
fuente