zend framework español php zend-framework

español - framework php zend



¿Cómo crear correctamente el dominio con Zend Framework? (1)

Los Modelos de dominio no extienden nada. Son simples clases que usas para encapsular la lógica de negocios. Pueden usar objetos de acceso a datos, por lo que puede haber una instancia protected de un objeto de puerta de enlace de datos dentro de la clase. Un objeto Row generalmente representa una instancia del dominio más de cerca que un objeto Table . Además, siempre puede obtener el objeto Table con el método getTable() la Row .

Normalmente, las clases de DM tienen una interfaz con los métodos correspondientes a las operaciones de nivel superior que puede hacer con esa clase. Pero no necesariamente quiere visualizar todas las operaciones de acceso a datos.

class Person { // Zend_Db_Table_Row object protected $data; public function subscribeToService(Service $service) { ... } public function sendMailTo(Person $recipient) { ... } public function changePassword($newPassword) { ... } }

También escribí en el blog sobre este tema la primavera pasada y escribí sobre él en la lista de correo de ZF recientemente .

En cuanto a tutoriales y recursos, intente http://domaindrivendesign.org/

Hice esta pregunta hace un tiempo, pero ahora estoy buscando implementar una separación real entre mi capa de acceso a la base de datos y la capa de dominio. También voy a trabajar para mover la lógica empresarial al dominio al que pertenece y fuera de los scripts del controlador.

Estoy usando Zend Framework que implementa los patrones Table Data Gateway y Row Data Gateway para la capa de acceso a datos, pero aparentemente no define realmente cómo construir una capa de dominio que esté separada de la capa de acceso a datos. He considerado utilizar un patrón de registro activo donde la lógica del dominio coexiste con la lógica de acceso a datos, pero tengo la siguiente situación que ocurre al menos una vez que no creo que Active Record maneje:

Tengo una sola tabla "Persona" que contiene los campos person_id y userType.

Cada tipo de usuario (administrador, comprador, asociado, supervisor) tiene una lógica comercial específica asociada a él y todos los tipos heredan alguna funcionalidad básica de un objeto Persona.

No quiero inflar el objeto Row Data Gateway con lógica empresarial que pertenece específicamente a un solo tipo de usuario, pero no estoy seguro de cómo construir la capa de dominio para representar los diferentes tipos de usuarios. Por ejemplo, ¿hago un objeto Person que contenga el objeto PersonGateway y luego escribo funciones de contenedor que pasan llamadas al objeto de puerta de enlace, o escribo el objeto Person para extender el objeto PersonGateway y luego solo implemento las funciones específicas que necesito?

Del mismo modo, normalmente pensaría que esto es (en parte) un problema de fábrica en el que necesito un método de fábrica que ejemplifique la subclase correcta en función de userType. ¿Sigue siendo el mejor método aquí con la clase Zend_Db de Zend Framework?

Cualquier sugerencia o enlace a tutoriales que hablen sobre cómo crear correctamente un modelo de dominio además de Zend_Db sería muy apreciado.