Factories e Inyección de dependencias

61 views
Skip to first unread message

Víctor Garcia Merediz

unread,
Oct 25, 2017, 3:26:07 AM10/25/17
to DDD-es
Hola,

Esta es mi primera publicación en este grupo. Aprovecho para presentarme: Soy Backend Deveoper desde hace unos 14 años. Me encanta mi profesión y como todos he ido evolucionando y adaptándome a las nuevas formas de programar. Ahora me encuentro a las puertas del DDD. Me han dado formación y leído unas cuantos artículos sobre el tema, con lo cual empiezo a conocer bastante bien la teoría. Pero llegamos a la práctica... bufff ¿Por dónde empezar?

Y llegamos al punto en el que me encuentro ahora. Antes de empezar grandes proyectos he decidido ir aplicando algunos de los conceptos que he ido aprendiendo en desarrollos sencillos, aunque aun esté a años luz del DDD. Y ahora mismo se me ha presentado una oportunidad: Resulta que la empresa en la que trabajo actualmente se dedican a desarrollar ecommerce con Magento... Magento 1, un framework más antiguo que Matusalén, y me han pedido hacer un importador de productos. ¡Perfecto! Lo voy a desacoplar de Magento. Y empecé a aplicar inyección de dependencias con sus interfaces, etc... desarrollando al final, un pequeño módulo de inserción de productos en Magento e inyectándolo al importador.

Y empiezo con la duda que quería exponer:

Desde el controlador de Magento (en el que el cliente deberá ejecutar la importación), instancio al importador (Importer), al cual le tengo que inyectar el gestor de la fuente de datos (ImporterSourceManager), el repositorio de las categorías (CategoryRepository) y el repositorio de los productos (ProductRepository). Con lo cual lleno la instancia del Importador de "new's" (new ImporterSourceManager, new CategoryRepository, ...). No se si es lo correcto o no. Tengo entendido que no, según me explicó un buen profesor que tuve en la última empresa, los "new" están bastante prohibidos, salvo algunas excepciones como por ejemplo al instanciar una clase que se encuentre en el mismo namespace. ¿Esto es así? ¿Debería usar factories? Si uso factories, lo hago con el método __invoke o con uno estático llamado create o algo así?

Muchas gracias de antemano. 

Carlos Peix

unread,
Oct 25, 2017, 12:18:26 PM10/25/17
to ddd-es
2017-10-25 4:26 GMT-03:00 Víctor Garcia Merediz <vict...@gmail.com>:
Desde el controlador de Magento (en el que el cliente deberá ejecutar la importación), instancio al importador (Importer), al cual le tengo que inyectar el gestor de la fuente de datos (ImporterSourceManager), el repositorio de las categorías (CategoryRepository) y el repositorio de los productos (ProductRepository). Con lo cual lleno la instancia del Importador de "new's" (new ImporterSourceManager, new CategoryRepository, ...).

Creo que un buen comienzo es instanciar las dependencias fuera del Importer, esto es, en el controlador de Magento. Luego podrás resolver esta misma necesidad con un framework de inyección de dependencias si vale la pena para tu caso. De esta manera estas quitando del Importer la gestión de las dependencias.
 
No se si es lo correcto o no. Tengo entendido que no, según me explicó un buen profesor que tuve en la última empresa, los "new" están bastante prohibidos, salvo algunas excepciones como por ejemplo al instanciar una clase que se encuentre en el mismo namespace. ¿Esto es así?
¿Debería usar factories? Si uso factories, lo hago con el método __invoke o con uno estático llamado create o algo así?

Podrías usar factories o builders para crear las dependencias, no conozco el método __invoke
 

Muchas gracias de antemano. 

--
Has recibido este mensaje porque estás suscrito al grupo "DDD-es" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ddd-es+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a ddd...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/ddd-es.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages