He estado leyendo en múltiples frameworks PHP, especialmente Zend Framework, pero me confundo la forma correcta de seguir adelante.¿El patrón DataMapper rompe MVC?
Zend Framework no usa ActiveRecords, sino que utiliza el patrón Table Data Gateway y Row Data Gateway, y utiliza un DataMapper para asignar los contenidos de Row Data Gateway al modelo, porque ActiveRecord se rompe cuando sus modelos no lo hacen tener una asignación de 1: 1 a sus tablas de base de datos. Hay un example of this en la guía Zend Quickstart.
Para mí, su ejemplo se ve muy hinchado con una tonelada de getters y setters en todo el lugar. Me encontré con varias publicaciones de blog sobre Domain Driven Design argumentando que el uso de tantos getters y setters es una mala práctica porque expone todos los datos del modelo interno al exterior, por lo que no tiene ninguna ventaja sobre los atributos públicos. Here is one example.
Mi pregunta: Si elimina esos getters y setters, ¿cómo representará sus puntos de vista? En algún punto, los datos tienen que golpear la vista para que pueda mostrarle algo al usuario. Seguir los consejos de DDD parece romper la separación entre M y V en MVC. Seguir el ejemplo de MVC y Zend parece romper DDD y me deja escribiendo un montón de getters, setters y DataMappers para todos mis modelos. Además de ser mucho trabajo, también parece violar DRY.
Realmente apreciaría algunos (enlaces a) buenos ejemplos o más información sobre cómo encaja todo. Estoy tratando de mejorar mis habilidades de arquitectura y diseño aquí.
Gracias. Ese artículo de Devlicious hace una buena lectura. Voy a leer el resto de la serie también. –
Esta es una buena respuesta y agregaría que no está mal con getters, setters. De hecho, tenerlos es una forma excelente de agregar lógica de validación. Hacer públicas las propiedades es rápido y sucio, y está bien al crear prototipos, pero no es una gran solución a largo plazo. Supongamos que quiere cambiar el nombre de una propiedad. Si hace esto, cada pieza de código que accede a esa propiedad debe cambiar. Si usa un nombre genérico para el método de acceso, no tiene que cambiar el código de cliente. Además, Doctrine es una solución mucho más rica que Zend DB. No recomendaría Doctrine1, pero prueba Doctrine2. –