2011-03-06 13 views
7

Me pregunto cuál es la diferencia entre esos 3 patrones.¿Cuál es la diferencia entre proxies, repositorios y servicios en Doctrine 2?

Por lo que yo entiendo:

  • servidores se usa sólo para entidades perezoso carga
  • repositorios se utilizan para añadir lógica a su modelo (ancho algún método de acceso directo para la declaración DQL)
  • Servicios se utilizan para confiar modelos y controladores

Para este último, los servicios, no me importa el punto con un proyecto de Doctrine 2 como repositorio no son conscientes del sistema persistente beh ind, porque usa el ORM con DBAL.

He leído que los proxies se pueden usar para agregar lógica a las entidades, entonces, ¿cuál es la diferencia con los repositorios?

Por cierto, ¿deberían mis Entidades solo contener getter/setter pública a su atributo y solo eso? ¿Es correcto?

Estoy perdido aquí.

¿Tiene algún ejemplo concreto?

Respuesta

17

Un Proxy es una referencia a algo.

Supongamos que está creando un usuario y un usuario tiene un grupo adjunto. Si no tiene soporte para Proxy, deberá buscar en DB para que el Grupo pueda usar la Entidad. Aquí es un posible código:

$group = $em->getRepository('Group')->findOneById(1); 

Con el apoyo a valores aproximados, no es necesario hacer la consulta de base de datos. Un Proxy se considera una referencia a un objeto DB, sin realmente recuperarlo. Su código:

$group = $em->getReference('Group', 1); 

el beneficio de tener proxy es simple ... si usted necesita para obtener (por ejemplo) el nombre del grupo, apenas lo hace normalmente: $ grupo-> getName(); Y Proxy inicializará la entidad (búsqueda de DB a pedido).

Un repositorio es una cuestión de manipulación de datos. Lo usas para administrar tus Entidades. De modo que puede encontrar ById, findOneByEmail, etc. También puede ampliar su funcionalidad básica e implementar sus propios métodos para administrar sus entidades, como: saveUser, retrieveMostActiveUsers.

Un servicio utiliza los repositorios internamente, pero contiene más validación y puede interactuar con> 1 repositorio. Por ejemplo, después de guardar con éxito al usuario, le gustaría enviarle un correo electrónico de Congrat. Por lo tanto, dentro de su método createUser de UserService, recupera el NotificationService y envía el nuevo correo electrónico de registro.

¿Está claro para usted ahora? =)

Cheers,

+3

+1 for NotificationService. Realmente ayuda a comprender qué tipo de cosas podría hacer un servicio (como UserService) con servicios colaboradores (como NotificationService). Gracias. ;-) –

Cuestiones relacionadas