233K Views

La doctrina de los Objetos Proxy y Carga Diferida

La doctrina es un Object Relational Mapper (ORM) que se encuentra en la parte superior de una potente Base de datos de la Capa de Abstracción (DBAL). Cuando usted ha estado trabajando con Symfony (+ Doctrina) por un tiempo, usted está obligado a tener venir a través de la Doctrina de representación de Objetos.

Si alguna vez has generado una entidad que se asocia con otra entidad, y han echado un vistazo a los argumentos de la función asociada con la entidad generado en la entidad de archivo, usted puede haber notado el extra de barra invertida antes de la declaración de tipo para el argumento de la función. En este caso, ‘\‘ antes ‘ProxyBundle\Entity\Sujetos‘. Si usted es como mí, usted se haya preguntado acerca de que la barra invertida, y usted necesita saber acerca de la Doctrina de los Objetos Proxy para entender su propósito.

En general día a día, un desarrollador no debe ser molestado por un objeto proxy, que debe ser transparente para el código. Y la Doctrina logra a la perfección. Recuerdo la primera vez que tuve que echar un vistazo a ellos fue cuando me encontré con un problema con la caché. Usted no necesita saber qué Objetos Proxy y lo ayudan a lograr, pero seguro que ayuda a saber. Eso es lo que vamos a estar hablando hoy.

la Doctrina de los Objetos Proxy:

La doctrina de representación de los Objetos se basa principalmente en dos Patrones de Diseño: modelo Proxy, y Perezoso Patrón de Carga.

De acuerdo a la documentation:

Un objeto proxy es un objeto que se coloca en el lugar o usado en lugar de los objetos «reales». Un objeto proxy puede añadir comportamiento del objeto proxy sin que el objeto de ser conscientes de ello. En la Doctrina de la 2, objetos proxy se utilizan para realizar varias funciones, pero principalmente para la transparencia de carga diferida.

objetos Proxy con su carga diferida instalaciones de ayudar a mantener el subconjunto de objetos que ya están en la memoria conectado con el resto de los objetos. Esta es una propiedad esencial, ya que sin ella sería siempre frágil parcial de los objetos en los bordes exteriores de su objeto gráfico.

Para ponerlo en simple término, un objeto proxy es simplemente un objeto contenedor que extiende la funcionalidad de la base de clase de entidad y le proporciona con carga diferida habilidades. Al recuperar una entidad de una base de datos, la base de la entidad es completamente inicializado, excepto las entidades que están asociados con él. Estas entidades son parcialmente cargado y envuelto en un objeto proxy. En este punto, sólo el id de la entidad asociada se conoce. Luego, cuando tenemos más acceso a un método o propiedad de este objeto proxy, la Doctrina de la voluntad de hacer una petición a la base de datos para cargar esa propiedad, si no está ya cargado.

Como se dijo antes, esto ocurre totalmente transparente para la aplicación debido al hecho de que la representación se extiende a su clase de entidad. Así que cada vez que persisten o el color de sus entidades a la Base de datos, usted no necesita preocuparse acerca de si usted tiene un objeto proxy o la entidad real. Puede consultar la la Doctrina de la Documentación para saber más acerca de los componentes internos de la Doctrina y de cómo se enfoque en la optimización de las consultas.

¿por Qué los Objetos Proxy?

No hay realmente no hay mucho que los objetos proxy. Es simplemente un objeto contenedor que se encuentra en la parte superior de la entidad base y se extiende para incluir carga diferida funcionalidades. La principal ventaja de esta funcionalidad es en la optimización de sus consultas de base de datos. Cuando estás en la ejecución de grandes consultas, o la obtención de una gran cantidad de datos de la base de datos, la Doctrina pasos y solo carga los datos que se necesitan en el tiempo, reduciendo el tiempo de ejecución. Luego, cuando las propiedades se accede a través de estas entidades, la Doctrina se carga desde la base de datos si no están ya cargados.

El problema que queda es que usted necesita saber cuando usted está haciendo demasiadas solicitud de base de datos para cargar cada una de las propiedades en el sentido que tiene la carga de la totalidad de la propia entidad. Por supuesto, esto depende de cómo el modelo de su aplicación por lo que vale la pena conocer cuando para cargar las entidades a través de los objetos proxy y cuando para cargar las entidades a través de ganas de ir a buscar.

Por defecto, cuando se captura una entidad de la base de datos, que son completamente inicializado, pero las entidades asociadas son sólo parcialmente cargado. Por otra parte, si usted conoce el identificador de base de la entidad, que en parte puede cargar sin inicializar cualquiera de sus propiedades. Para ello:

Aquí, usted sería establecer una referencia a la entidad de destino.

De forma predeterminada, las entidades asociadas son perezosos cargado, como se dijo antes. Sin embargo, si necesita ser inicializado por completo, usted podría simplemente un conjunto de fetch: con GANAS, como se muestra a continuación:

Con fetch: con GANAS, en lugar de ser perezoso cargado, las entidades asociadas serán completamente inicializado.

Parcial de los Objetos:

Un montón de gente puede confundir Parcial de los Objetos con Objetos Proxy y es importante saber la diferencia entre los dos. Un parcial de objeto es un objeto cuyo estado no es completamente inicializado después de ser reconstituido a partir de la base de datos y que se ha desconectado del resto de sus datos.

En contraste con los objetos proxy, el uso parcial de los objetos generalmente se desaconseja. Cuando se trabaja con objetos parciales, uno debe ser consciente de propiedades y métodos que son accesibles sin peligro y aquellas que no lo son. Por otra parte, los campos que no son recuperados de la base de datos no será actualizado por el EntityManager del UnitOfWork incluso si el cambio en los objetos. Esto está en contraste con objetos proxy, donde incluso si usted tiene acceso a un método o propiedad que no se inicializan, son accesibles sin peligro ya que va a estar cargado de la base de datos debido a que el proxy.

Usted puede aprender más acerca de los Objetos Parciales here.

Category(s) Doctrine uvdesk
. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


1 comments

  • Roman Malovanyi
    Thanks, great article!
  • css.php