Pregunta de fábrica de objetos: utilizando la información de consulta de la base de datos para crear objetos

StackOverflow https://stackoverflow.com/questions/3808052

Pregunta

Tengo varios objetos, como productos, pedidos, etc. Cuando obtengo información de mi base de datos, tomo una fila y creo uno de los tipos de objetos. Luego trabajo con ese objeto creado. Leí esto se llama fábrica.

¿Hay alguna ventaja en hacer esto? ¿Especialmente en un lenguaje tipado libremente como PHP?

Gracias

EDITAR: ¿Es aquí donde obtengo agnosticidad de la base de datos? ¿Es esto lo que hace esencialmente un ORM?

¿Fue útil?

Solución

Al crear sus objetos a partir de las consultas de la base de datos, está definiendo la asignación entre sus objetos y la base de datos relacional. Esto es exactamente lo que hace el software ORM.

Al hacerlo y garantizar que sus objetos nunca accedan directamente a la base de datos, sino que usen sus funciones/objetos de acceso de base de datos, está protegiendo su código de los cambios de dos maneras:

  • Los cambios en el esquema de su base de datos no se agitarán a través de su código. En cambio, los cambios en el código se ubicarán solo en los objetos de acceso a su base de datos.

  • Puede cambiar a un DBMS diferente implementando una nueva capa de base de datos que sigue la misma interfaz que el original. Sus otros objetos no requerirán cambios.

Supongo que en ese sentido, obtienes algo de agnosticidad de base de datos, pero probablemente estarás mejor usando una biblioteca de base de datos que proporciona esa agnosticidad fuera de la caja.

En mi opinión, la ventaja es que está trabajando con objetos y obtiene todas las ventajas que ofrece un lenguaje orientado a objetos. Luego puede leer la lógica del dominio en un nivel superior (en términos de los objetos que ha definido) sin tamizar a través de consultas de bases de datos. Escribir el ORM usted mismo puede ser difícil, pero hay herramientas que ayudan con eso.

Esta es la ruta que normalmente tomo, pero no hago ningún desarrollo de PHP, por lo que no puedo decir qué tan bien se aplica a ese idioma.

Otros consejos

Lo que está describiendo es una implementación de una capa de acceso a datos: no suena como un ejemplo del Patrón de método de fábrica, ni el Patrón de fábrica abstracta.

Sí, los ORMs unen la brecha de objetos a bases de datos relacionales y pueden servir como su capa de acceso de datos. Tenga en cuenta que cualquier ORM que use tiene ciertos pros/contras/limitaciones. Dependiendo de su experiencia y requisitos, escribir su propia capa de acceso a datos a veces es una buena idea; No sienta que tiene que usar un ORM de terceros.

Sí, una buena capa de acceso a datos facilita el intercambio de su mecanismo de almacenamiento (base de datos diferente, XML, archivos planos, lo que sea) sin cambiar la lógica de su negocio, la interfaz de usuario u otro código.

Independientemente de los idiomas de tipo suelto o de tipo fuerte, si está trabajando en un lenguaje OO, será mucho más fácil escribir código utilizando objetos de datos (proporcionados por una capa de acceso a datos de cosecha propia o de cosecha propia). Estoy seguro de que es posible escribir un sistema sin capa de acceso de datos, donde su capa de negocio funciona directamente con la base de datos. Pero es probable que sea más difícil implementar y mantener.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top