Re: [altnet-hispano] Arquitectura DDD, es esto DDD?

452 views
Skip to first unread message

nelopa...@gmail.com

unread,
Jun 29, 2012, 12:39:36 PM6/29/12
to altnet-...@googlegroups.com
Hola Martín,

según entiendo, DDD es una metodología de trabajo que propone una
arquitectura determinada, pero no dejes fuera la metodología (al menos
no inconscientemente).

te recomiendo que veas la VAN de Angel sobre DDD para entender del tema.

saludos.
nelo

2012/6/29 Martin Vecchione <martin.v...@gmail.com>:
> Hola buenas tardes a todos!!
>  soy nuevo en el grupo asi que me presento!
>
>  Estoy intentando migrar una aplicacion Mediana-Grande que tiene mas de 10
> años a una plataforma web (usando WebForm + Entity Framework 4.1) !
> estaba interesado en utlizar la arquitectura llamada Domain Driven
> Design!...Despues de buscar mucho en internet llegue a las siguientes
> conclusiones...
>
>                   Domain Driven Design.
>
> DOMAIN MODEL (POCOS  y DTO)
>
> Entidades (Poco) y DTO (data transfer objects)
>
> ·         Validaciones básicas de la entidad.
>
> Se puede hacer usando Fluent validation. Ejemplo: El auto tiene que tener un
> motor.
>
> ·         Comportamiento de la Entidad.
>
> El auto es Azul!. ¿Que tipo de Auto es?
>
> REPOSITORIES
>
> Conoce al Domain Model
>
> ·         CRUD (create read update delete)
>
> DOMAIN SERVICES  (corazón de la aplicación)
>
> Cuando un proceso no es responsabilidad de la entidad.
>
> Conoce al Domain Model y al Repositorio.
>
> ·         Reglas de negocio.
>
> Ejemplo: El auto no se puede vender si no tiene patente. Consulta entidad
> auto y patentamiento.
>
> ·         Son transacciones.
>
> Ejemplo: Vender el auto.
>
> ·         Puede utilizar varias entidades.
>
>  (Auto, cliente, vendedor)
>
> ·         No mantiene un estado. Empieza y termina.
>
> APPLICATION SERVICE
>
> Responsable del Workflow de la aplicación.
>
> Conoce al Domain Model  al Repositorio y al Domain Services.
>
> ·         No tiene reglas de negocio.
>
> ·         Coordina el uso de los Domain Services.
>
> ·         Puede utilizar al repositorio para devolver información.
>
> ·         Puede preguntarle a al entidad por cierto estado y realizar una
> validación simple. Ejemplo: Contrato Finalizado.
>
> ·         Coordina el manejo de excepciones.
>
> UI  (User interface)
>
> Pantallas del cliente.
>
> Conoce a Poco (Solo usa DTO) y al Application Services
>
> ·         Llama al Application Service.
>
> ·         No deberia usar Pocos sino DTO!
>
> ·         No tiene logica de negocio.
>
> ·         Contiene lógica de presentacion.
>
>
> Estoy abierto a todo tipo de sugerencias, correciones, etc todo lo que me
> sirva para aprender!
>
> Desde ya muchas gracias y un saludo a todos
>
> Martin Vecchione
>
> --
> Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de
> Grupos de Google.
> Para ver este debate en la Web, visita
> https://groups.google.com/d/msg/altnet-hispano/-/pYUiPV7ryikJ.
> Para publicar una entrada en este grupo, envía un correo electrónico a
> altnet-...@googlegroups.com.
> Para anular tu suscripción a este grupo, envía un correo electrónico a
> altnet-hispan...@googlegroups.com
> Para tener acceso a más opciones, visita el grupo en
> http://groups.google.com/group/altnet-hispano?hl=es.

Mauro Decima

unread,
Jun 29, 2012, 12:55:07 PM6/29/12
to altnet-...@googlegroups.com
Guia de microsoft españa (vale decir que esta en español) una implementacion de ddd con las ultimas tecnologias de microsoft.
Personalmente me sirvio mucho para entender los conceptos ya que lo acompaña un proyecto, pero como toda implementacion tiene decisiones que puedes o no compartir.
 
Mauro
--

Convertí tus archivos a pdf gratis en http://www.guardarcomopdf.com

Angel Java Lopez

unread,
Jun 29, 2012, 1:10:53 PM6/29/12
to altnet-...@googlegroups.com
Hola gente!

Martin, eso que describes me recuerda a una guia de Microsoft de Arquitectura, que aparecio alla por el 2001, y luego fue actualizada hace pocos anios.

Pero, no, no es en principio DDD.

En esa guia, Microsoft separaba estado del dominio (POCOs) de la conducta del negocio (lo que llamas Domain Services). Y tenia sus razones:

- La gente no conocia programar el negocio en objetos
- Queria que .NET tuviera aceptacion paso a paso
- Por eso, los DTOs venian ya "out of the box" (se acuerdan de los datasets? tipados y no tipados? y de los dinosaurios? :-)
- etc...

Toda esa guia venian orientada a eso. No porque no supieran programar en objetos, la gente de Microsoft, sino, como en otras ocasiones, querian que lo nuevo pudiera asimilarse de forma rapida, paso a paso.

Vean que los datasets desaparecieron de las demostraciones, reference apps, y demas, de Microsoft, hace anios.

Mis enlaces

Espero no sumar mucha confusion

Nos leemos!

Angel "Java" Lopez
gh:ajlopez

Carlos Peix

unread,
Jun 29, 2012, 1:21:41 PM6/29/12
to altnet-...@googlegroups.com
Hola Martin,

An primer lugar, creo que DDD no es exactamente una arquitectura. Hay arquitecturas mas amigables con DDD y otras menos.

En DDD el "corazon" de la aplicacion es el conjunto de los objetos que representan a los conceptos (el modelo). En DDD se consideran tres estereotipos de objetos dentro del modelo: entities, value objects, services.

En la ultima frase hay dos terminos que no deben confundirse terminologicamente:
  • Entities: son objetos tienen identidad, es decir, que se los referencia por un identificador. Suelen tener logica de negocio, segun la su responsabilidad que mana del concepto que modelan. No confundir con las entidades de otros modelos, que solo transportan datos y logica minima.
  • Services: se utilizan para modelar servicios del dominio. No confundir con otros servicios externos al modelo como servicios de aplicacion, de infraestructura, etc.
Nunca he trabajado con la arquitectura de referencia que menciona Mauro pero he escuchado que debe tenerse cuidado en su aplicacion, no necesariamente conduce a trabajar en DDD.

Ademas de tu pregunta central, te sugiero que tambien evalues trabajar en ASP.NET MVC (en lugar de WebForms), a mi me gusta mas.

----------------------------------
Carlos Peix

Kiquenet

unread,
Jun 29, 2012, 1:25:12 PM6/29/12
to altnet-...@googlegroups.com
Este debate puede aportar información de interés
http://www.linkedin.com/groups/Parece-que-Domain-Driven-Design-2615616.S.102776810?trk=group_search_item_list-0-b-ttl&goback=%2Egna_2615616

Mauro, de la guía de Microsoft Ibérica de DDD, qué no compartes ? sería i nteresante.

Saludos.


Angel Java Lopez

unread,
Jun 29, 2012, 1:46:26 PM6/29/12
to altnet-...@googlegroups.com

Jorge Rowies

unread,
Jul 11, 2012, 8:03:35 AM7/11/12
to altnet-...@googlegroups.com
Hola Martín.

Si estás interesado en DDD, te recomiendo el libro de Evans
"Domain-Driven Design: Tackling Complexity in the Heart of Software"
(http://www.amazon.com/gp/product/0321125215/)

También hay un libro, cuya versión en pdf es gratis, que es un resumen
del de Evans, "Domain Driven Design Quickly"
(http://www.infoq.com/minibooks/domain-driven-design-quickly/).

Saludos

2012/6/29 Martin Vecchione <martin.v...@gmail.com>:
> Hey!!
>
> Muchisimas gracias a todos por sus respuestas como veran me falta mucho para
> terminar de entender los que es DDD y lo que no es!
>
> Ahora voy a leer todos los links que aportar a mi causa de entender el
> concepto de Domain Driven Desing!!
>
> De verdad muchas gracias ;)
> https://groups.google.com/d/msg/altnet-hispano/-/WTYuTxgCY3YJ.

Jorge Fioranelli

unread,
Jul 11, 2012, 7:19:28 PM7/11/12
to altnet-...@googlegroups.com
Agregando a lo que dice JorgeR, una vez que entendiste lo conceptos de DDD y ya tenes algo de practica, creo el mayor desafio/problema es construir correctamente los aggregates.
Para eso te recomiendo leer estos tres articulos de Vaughn Vernon  http://dddcommunity.org/library/vernon_2011 

Saludos

JorgeF

2012/7/11 Jorge Rowies <jorge....@gmail.com>

sergio

unread,
Jul 13, 2012, 2:49:54 AM7/13/12
to altnet-...@googlegroups.com
Una página interesante es  http://domaindrivendesign.org/ 

creo que si vas a hacer DDD, es interesante que conozcas  CQRS, para intentar reducir la complejidad  http://msdn.microsoft.com/en-us/magazine/ee236415.aspx

Y kique, si no me equivoco, el libro del que habla Mauro lo puedes encontrar en  http://microsoftnlayerapp.codeplex.com/ , junto con la app de ejemplo.

inge...@gmail.com

unread,
Jul 15, 2012, 10:53:13 PM7/15/12
to altnet-...@googlegroups.com
Hola,
 
haber creo que le has dado al tema que en estos momentos mas me apasiona... eh estado leyendo a Evans aunque todavía no logro terminar el libro, hay vamos (Smile) de todas formas al ver que hay un buen interes en este tema primero te quiero compartir un link que encontre en las horas de investigación sobre el tema y que me parece genial... por que lleva un paso a paso de como hacer un aplicación. Luego de este puedes ya entrar a revisar un poco N-Layer que tiene todo un libro y una app muy completa (tanto que a veces es complejo entender por donde va...) pero igual creo que unai y cesar de la torre son algunos de los creadores de este ejemplo saben bastante sobre el tema y pues las criticas destructivas estan de mas.
 
 
En cuanto a N-Layer en los correos anteriores creo que ya te pasaron el link... en muchos foros he escuchado fuertes criticas de ella, pero la verdad es que a mi me ha servido muchisimo he tomado conceptos he visto como en .Net aplicar muchos de los patrones que Eric Evas plantea en su libro... recien he visto que ya tienen practicamente lista la version 2 de .Net y he revisado el codigo fuente y la verdad esta muy bueno para ver y entender..
 
Ahora bien no se que tal estaría que nostros mismos organizaramos un grupo para investigar y estudiar sobre el tema y no se depronto organizar y crear una aplicación de ejemplo donde podamos ir debatiendo y puliendo nuestros conocimientos y pues la verdad en este grupo hay varios compañeros que conocen bastante y nos pueden apoyar....
 
 
Bueno hay les dejo la propuesta y la inquietud de todas formas espero te sirva la información.
 
 
Sent: Friday, June 29, 2012 2:14 PM
Subject: [altnet-hispano] Re: Arquitectura DDD, es esto DDD?
 
Hey!!
 
Muchisimas gracias a todos por sus respuestas como veran me falta mucho para terminar de entender los que es DDD y lo que no es!
 
Ahora voy a leer todos los links que aportar a mi causa de entender el concepto de Domain Driven Desing!!
 
De verdad muchas gracias ;)
--
wlEmoticon-smile[1].png

Jorge Fioranelli

unread,
Jul 16, 2012, 2:01:38 AM7/16/12
to altnet-...@googlegroups.com
Este mindmap tiene muy buenos links sobre DDD y CQRS: http://www.mindmeister.com/de/181195534/cqrs-ddd-links

Tambien recomiendo ver estos dos para reforzar los conceptos:

Saludos

JorgeF

2012/7/16 <inge...@gmail.com>
wlEmoticon-smile[1].png

Max Gmail

unread,
Jul 16, 2012, 9:46:46 AM7/16/12
to altnet-...@googlegroups.com
Hola,
 
Disculpa Jorge no puedo acceder a los links... tu me podrías indicar como puedo acceder... me pide usuario y contraseña de outlook, pongo las de hotmail pero no me las acepta.
 
Gracias,
2012/7/16 <inge...@gmail.com>
Para anular tu suscripción a este grupo, envía un correo electrónico a mailto:altnet-hispano%2Bunsu...@googlegroups.com

Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.
--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a mailto:altnet-hispano%2Bunsu...@googlegroups.com

Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.
wlEmoticon-smile[1].png

Jorge Fioranelli

unread,
Jul 16, 2012, 4:07:54 PM7/16/12
to altnet-...@googlegroups.com

Jorge Fioranelli

unread,
Jul 16, 2012, 4:13:40 PM7/16/12
to altnet-...@googlegroups.com

Max Gmail

unread,
Jul 16, 2012, 4:27:52 PM7/16/12
to altnet-...@googlegroups.com
Hola,
 
 
discúlpame creo que el error era mas de capa 8 jejeje por que daba click sobre el link y me enviaba a algo de outlook pero copiando y pegando sobre el browser si me funciona...
Esta buenísima la herramienta y la forma de organizar una investigación creo que me copiare del método....
 
 
Y pues con el tiempo les iré contando los resultados de la lectura para generar mas debate e ir construyendo mucho mas sobre DDD en este grupo la verdad me apasiona mucho este tema de la arquitectura de software y por ahora estaré centrado en DDD y TDD ya mirare cuando termine todo eso con que continuar  si es que para cuando termine no este mando a recoger todo lo que leí... Triste
 
 
 
Gracias,
 
Sent: Monday, July 16, 2012 3:13 PM
Subject: Re: [altnet-hispano] Re: Arquitectura DDD, es esto DDD?
 
wlEmoticon-sadsmile[1].png

Max Gmail

unread,
Jul 17, 2012, 10:04:50 AM7/17/12
to altnet-...@googlegroups.com
Hola,
 
a la primera si efectivamente no son CRUD si bien contienen un CRUD por que ellos son los responsables de realizar las implementaciones de todo el acceso a datos el concepto es aun mas global y sobre todo cuando implementas UoW como tu bien lo dices.
 
A la segunda no estoy de acuerdo ya que primero los repositorios son en parte “servicios de dominio” son aquellos servicios que nos dan acceso a infraestructura para realizar operaciones con la BD, si bien lo que dices es cierto de las colecciones creo que es mas claro si dices << los repositorios hacen el trabajo contra la BD siempre utilizando nuestras entidades, esto quiere decir te regresan una Persona, Ciudad, Factura etc... pero nunca te regresan o insertan un DataRow con la información de una persona... para Repositorios vs CRUD creo esta es importante tener claro esto >> para mi hay esta la gran diferencia. Ahora el tema de los servicios de dominio y que solo controla las entidades en un principio lo maneje así pero ahora que eh leído a Evans creo que es mas conveniente decir que es cuando vas a hacer una operación que no encaja correctamente sobre una entidad. Me explico, Cuando tienes una factura y quieres sacar su total debes implementar una funcion returnTotal() dentro de Factura pero cuando quieres no se consolidar el impuesto de las facturas bajo cierto parámetro debes realizar un servicio de dominio que realice esta tarea sobre varias Facturas o de pronto y la consulta SOLO TE RETORNA 1 FACTURA entonces consolidas solo 1, pero esto no significa que tu factura deba consolidarse sola.
 
Ahora en cuanto a mi experiencia antes estaba muy orientado a programar sobre la BD, esto quiere decir que siempre hacia el modelo de BD y luego si la aplicación... leyendo a evans eh cambiado totalmente mi forma de pensar... ahora trato de organizar mi idea de aplicación (Diseño) en base a objetos.. al comienzo del libro evans muestra ciertos ejercicios donde el pinta un par de cuadros y rayas y evidencia como esto tratado como objetos traídos del experto del negocio a código tal cual brindan resultados geniales. De hay que te recomiende mejor ver la forma de diseñar, analizar y sobre todo céntrate mucho en el lenguaje ubicuo, el concepto del la relación con el experto del negocio y hay si creo encontraras los mayores beneficios que brinda DDD después ya aplicaras y te preocuparas por las reglas de repositorio, specify by, loggin, trace, poco, selft-tracking y demás. Yo inicie así tanto así que primero leí el N-Capas de microsoft que te recomendé antes que a Evans (Grave error) pero ahora que estoy leyendo a Evans eh entendido mucho mas lo que en N-Layer quieren hacer.
 
Saludos, y espero que mis consejos sean claros y beneficiosos.
 
Sent: Monday, July 16, 2012 10:26 PM
Subject: Re: [altnet-hispano] Re: Arquitectura DDD, es esto DDD?
 
Aun que no lei todo, veo sobre tu resumen lo siguiente:
 
Repositorio => NO es CRUD, es presentar el acceso a datos como una colección; quien finalmente persite los datos es la Unidad de Trabajo.
Servicios del Dominio => NO conocen los repositorios, solo realizan operaciones entre Entidades.; esto con el fin de aplicar TestUnitarios a la capa del dominio sin depender de los repositorios.

El lunes, 16 de julio de 2012 15:27:52 UTC-5, Max Rodriguez escribió:
Hola,
 
 
discúlpame creo que el error era mas de capa 8 jejeje por que daba click sobre el link y me enviaba a algo de outlook pero copiando y pegando sobre el browser si me funciona...
Esta buenísima la herramienta y la forma de organizar una investigación creo que me copiare del método....
 
 
Y pues con el tiempo les iré contando los resultados de la lectura para generar mas debate e ir construyendo mucho mas sobre DDD en este grupo la verdad me apasiona mucho este tema de la arquitectura de software y por ahora estaré centrado en DDD y TDD ya mirare cuando termine todo eso con que continuar  si es que para cuando termine no este mando a recoger todo lo que leí... Triste
 
 
 
Gracias,
 
Sent: Monday, July 16, 2012 3:13 PM
Subject: Re: [altnet-hispano] Re: Arquitectura DDD, es esto DDD?
 
Va de nuevo (se me escapo el send):
 
 
Saludos
 
Jorge


On Tue, Jul 17, 2012 at 6:07 AM, Jorge Fioranelli <jorge.fi...@gmail.com> wrote:
Acá van de nuevo (corregidos):
 
http://www.mindmeister.com/de/181195534/cqrs-ddd-links
 

On 16/07/2012, at 11:46 PM, Max Gmail <inge...@gmail.com> wrote:

http://www.mindmeister.com/de/181195534/cqrs-ddd-links
 
--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-hispano@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispano+unsubscribe@googlegroups.com

Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.
--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.

Martin Vecchione

unread,
Jul 17, 2012, 1:22:21 PM7/17/12
to altnet-...@googlegroups.com
Hola! muchas gracias por tu respuesta, es verdad lo que dices, deberia volver a releer a Evans pero no es algo facil y tampoco de cambiar la forma de programar (como tu dices yo tmb estoy muy acostumbrado a programar contra la BD)...

Aprovechando el hilo de la conversacion (y teniendo en cuenta que no he leido de nuevo a Evans) hago un par de preguntas que espero no oscurezcan tus consejos/explicaciones...

1. Cuando dices que el repositorio son en parte servicios de dominio, ahi me entra la duda, los repositorios no son acceso a datos? como una capa intermedia entre mis servicios de dominio y la infraestructura??..

2. En tu ejemplo de retornar el total de la factura, que pasa si para obtener ese dato no se tengo que acceder a una tabla que me dice el total de la factura (supongamos que el total es la sumatoria de varios detalles). En ese caso si debería ser un servicio de dominio?

3. En el caso de las validaciones que requieren acceder a la BD para consultar un dato también entrarian dentro de un servicio de dominio?? o irían a la entidad (esto no me suena mucho ya que para hacer esto la entidad de alguna manera deberia conocer a la BD y para mi me suena a antipatron ?


Desde ya muchas gracias por tu tiempo!!




 
Saludos, y espero que mis consejos sean claros y beneficiosos.

Juan Manuel Lombana Martinez

unread,
Jul 17, 2012, 1:42:27 PM7/17/12
to altnet-...@googlegroups.com
Hola,

Con respecto al tema de los repositorios estamos deacuerdo en que cotienen la invocación del CRUD, pero no solo eso, el crud realmente esta en la unidad de trabajo, en el repositorio también se puede implementar paginación, ordenamiento y filtrado, implementaciones de algunos patrones como la Especificación; esto ya no es crud, por eso insisto en aislar el concepto, dando al repositorio no la responsabilidad del CRUD, enfocar los repositorios especificamente contra el alamacén de datos lo considero un error, aunque no tienen lógica del negocio, su función principal es registrar y realizar el seguimiento necesario para entregar y persistir los datos en forma de Colección, quien realiza la operación y levanta la transacción es siempre la unidad de trabajo, si hablásemos en términos de tecnología quien escribe el SQL, quien abre la conexión, quien lee los datarow es la unidad de trabajo.

Con respecto a los servicios del dominio me encuentro en total desacuerdo a que se invoquen desde allí los repositorios, esta labor es propia de los servicios de aplicación; este componente lo llamaría yo el "Pegamento" pues se encarga de realizar todo el flujo de trabajo y levantar la transacción en caso de ser necesario, si un servicio de dominio necesita mas de una entidad o una colección o datos adicionales deben ser recibidos por parámetros en un IEnumerable por ejemplo, esto reduce el numero de pruebas de integración y aumenta las unitarias, pues los servicios del dominio son mas "Limpios", personalmente considero que es mejor realizar la implementación toda desde la capa de aplicación, así la necesidad de cambio con respecto a la invocación de todos los elementos se realizara en un solo punto.

El martes, 17 de julio de 2012 09:04:50 UTC-5, Max Rodriguez escribió:
Hola,
 

Max Gmail

unread,
Jul 17, 2012, 4:46:43 PM7/17/12
to altnet-...@googlegroups.com
Hola,
 
Ok intentare contestar desde mi punto de vista las dudas de este tema...
 
1.- si es correcto los repositorios se implementan en una capa intermedia llamada infraestructura pero lo fundamental en DDD es el DOMINIO principalmente, esto significa que cuando tu defines la forma como vas a obtener la información de tu sistema de persistencia <BD, txt, MomgoDB, Mocks... etc> especificas un reportorio para esto, técnicamente en código es una interfaz en tu dominio el hecho que tu la implementes en infraestructura, ella esta definida en tu dominio... por esto digo que son en parte “servicios de dominio” por que su funcionalidad es bríndale a nuestro dominio un método para acceder a tu sistema de persistencia. Ahora quiero hacer una aclaración puntual Unidad de trabajo no es mas que un patrón para realizar reunir las transacciones necesarias y ejecutarlas en un solo momento y no tiene nada que ver con CRUD o Paginación esta lógica esta implementada en el repositorio no en la Unidad de Trabajo... tanto así que el repositorio usa a la UoW y no al revés por ende el UoW no esta haciendo nada de CRUD simplemente esta lanzando un cola de peticiones pendientes en un solo momento a tu BD o sistema de persistencia.
 
2.- Primero que pasa si... es una pregunta que nunca podrás contestar por que sin un limite puedes hasta reinventar Windows y no terminar... pero esto es mas (Ingeniería de requerimientos) ahora comprendo tu pregunta y es un ejemplo diferente para ver que sucedería entonces yo lo solucionaría así. Primero mi factura es un agregado que contiene los detalles de la factura por ende mi factura es la única autorizada para hacer la suma de tus detalles, ahora bien puedes crear una clase que haga el metodo sumar detalles dentro de factura ó un servicio que llame a factura le pida la suma y el la de como resultado... en ultimas es una función exclusiva de la factura y es su responsabilidad como agregado realizar este calculo. En respuesta no seguiría siendo un método de tu factura ya que ella es la responsable del agregado... Ten cuidado por que siempre (yo termino Triste) haciendo dominios anémicos con entidades q solo tienen propiedades que son campos en la base de datos y 0 lógica y/o peor aun responsabilidad, los servicios de dominio son mas excepciones a la regla de cuando tu regla de negocio no encaja en tu entidad que tratar de poner todo en un servicio por que tiene algo como factura.detalle es algo a evaluar, pero repito siempre termino haciéndolo como no es por el tema de la costumbre de programar mal....
 
3.- en esta creo que de cierta forma me das la razón al primer punto pero desglosemos por partes:
 
3.1- Validación te recomiendo ver la forma como en N-Laver V2.0 realizar la validación de una entidad, me parece genial y muy limpia de hacerlo, sobre todo por que acumulas errores y se los muestras todos al usuario no estas enviando 1 por 1...
 
3.2- Si necesitas crear una validación contra la base de datos yo lo resolvería creando efectivamente un servicio de dominio donde recibe la factura y el repositorio pertinente... y es acá donde digo que los repositorios son de dominio (para retirar el “es como un servicio” encargado exclusivamente de tratar con tu sistema de persistencia) lo trataremos por su nombre diferenciador “Repositorio” entonces si bien remitiéndome a lo que Juan Manuel escribe sobre la capa de aplicación si bien allí es donde hace algo como esto:
 
Dominio.Repositorio.IRepositorioFactura facRepo =  new Infraestructura.Repositorio.RepositorioFactura(new UnidadDeTrabajo());
 
allí no es donde tu haces el facRepo.ObtenerFacturaParaValidar(123); o las consultas necesarias, estas creería las haces en dominio utilizando algo como Satisfy By o Policy o simplemente en código con un if haciendo visible tu regla de negocio por ende seria error grave (lo suelo cometer) migrar lógica de dominio a aplicación solo por que allí es donde instancias tu repositorio, ahora si tienes en cuenta lo que te digo en el punto 1 sobre repositorio, tu simplemente en tu dominio harias uso de tu repositorio para aplicar la regla de tu negocio y todo esto es posible por que quien define tu repositorio de Factura es tu dominio no tu capa de infraestructura o de aplicación.
 
Espero haya sido claro en mi forma de entender DDD y como se ve plasmada en este caso puntual, no soy un gurú, recién he empezado a trabajarlo seriamente con DDD y como viste en muchos casos en la practica hago todo lo contrarío  pero bueno es cuestión de tiempo corregir mis proyectos y mejorar.
 
 
Ahora para cerrar y no aburrir retomo mi inicial propuesta como verán de útil esta discusión pero sobre una investigación formal y tratando de generar código como recomienda DDD... bueno para mi sería genial espero y algún momento les suene la idea.
Sent: Tuesday, July 17, 2012 12:22 PM
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/HbsPAHPB4TYJ.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
wlEmoticon-sadsmile[1].png

Jhonnys Lopez Celedon

unread,
Jul 17, 2012, 8:10:58 PM7/17/12
to altnet-...@googlegroups.com
Hola a todos, me permito hacer una pequeña nota en la conversación he visto que han referenciado la categoría de arquitectura de mi blog http://jhonnyslopez.wordpress.com/arquitectura la sección cuanta con ejemplo que son sólo ejemplos a nivel "estudiante" no es DDD, principalmente porque ese tipo de arquitectura tal cual como está carece de comportamiento en el dominio, es un ejemplo en el cual se pueden observar muchas cosas de harían parte de una arquitectura DDD pero sin comportamiento no es más que un dominio anemico, por otra parte no hay agregados, ni value objects que son generalmente los temas que suelen generar más confusión, el ejemplo está basado en la guía de arquitectura ncapas de microsoft que en la primera versión deja mucho que desear para ser DDD pero la versión 2 de la aplicación de ejemplo ya tiene muchas correcciones.

Éste es un ejemplo mucho más acertado y sin tanta separación en proyectos:  http://code.google.com/p/ndddsample/ 
wlEmoticon-sadsmile[1].png

Martin Vecchione

unread,
Jul 18, 2012, 10:41:28 AM7/18/12
to altnet-...@googlegroups.com
Max,

 De verdad que me ha servido tu explicación...

 Entiendo a lo que te refieres con un dominio anemico, en un primer momento tuve una gran duda de agregarle a la entidad conocimiento de la persistencia para evitar un dominio anemico, pero terminaría cayendo en algo peor...

 Por lo pronto me he bajado el codigo de ejemplo que nos a enviado  Jhonnys López Celedon

  Como tu dices DDD es una metodologia y como tal es cuestion de perderle el miedo, ponerla en practica y tratar de corregir los errores que indefectiblemente van a surgir!

Muchas gracias por tu ayuda!!


El martes, 17 de julio de 2012 17:46:43 UTC-3, Max Rodriguez escribió:
Hola,
 
Ok intentare contestar desde mi punto de vista las dudas de este tema...
 
1.- si es correcto los repositorios se implementan en una capa intermedia llamada infraestructura pero lo fundamental en DDD es el DOMINIO principalmente, esto significa que cuando tu defines la forma como vas a obtener la información de tu sistema de persistencia <BD, txt, MomgoDB, Mocks... etc> especificas un reportorio para esto, técnicamente en código es una interfaz en tu dominio el hecho que tu la implementes en infraestructura, ella esta definida en tu dominio... por esto digo que son en parte “servicios de dominio” por que su funcionalidad es bríndale a nuestro dominio un método para acceder a tu sistema de persistencia. Ahora quiero hacer una aclaración puntual Unidad de trabajo no es mas que un patrón para realizar reunir las transacciones necesarias y ejecutarlas en un solo momento y no tiene nada que ver con CRUD o Paginación esta lógica esta implementada en el repositorio no en la Unidad de Trabajo... tanto así que el repositorio usa a la UoW y no al revés por ende el UoW no esta haciendo nada de CRUD simplemente esta lanzando un cola de peticiones pendientes en un solo momento a tu BD o sistema de persistencia.
 
2.- Primero que pasa si... es una pregunta que nunca podrás contestar por que sin un limite puedes hasta reinventar Windows y no terminar... pero esto es mas (Ingeniería de requerimientos) ahora comprendo tu pregunta y es un ejemplo diferente para ver que sucedería entonces yo lo solucionaría así. Primero mi factura es un agregado que contiene los detalles de la factura por ende mi factura es la única autorizada para hacer la suma de tus detalles, ahora bien puedes crear una clase que haga el metodo sumar detalles dentro de factura ó un servicio que llame a factura le pida la suma y el la de como resultado... en ultimas es una función exclusiva de la factura y es su responsabilidad como agregado realizar este calculo. En respuesta no seguiría siendo un método de tu factura ya que ella es la responsable del agregado... Ten cuidado por que siempre (yo termino Triste) haciendo dominios anémicos con entidades q solo tienen propiedades que son campos en la base de datos y 0 lógica y/o peor aun responsabilidad, los servicios de dominio son mas excepciones a la regla de cuando tu regla de negocio no encaja en tu entidad que tratar de poner todo en un servicio por que tiene algo como factura.detalle es algo a evaluar, pero repito siempre termino haciéndolo como no es por el tema de la costumbre de programar mal....
 
3.- en esta creo que de cierta forma me das la razón al primer punto pero desglosemos por partes:
 
3.1- Validación te recomiendo ver la forma como en N-Laver V2.0 realizar la validación de una entidad, me parece genial y muy limpia de hacerlo, sobre todo por que acumulas errores y se los muestras todos al usuario no estas enviando 1 por 1...
 
3.2- Si necesitas crear una validación contra la base de datos yo lo resolvería creando efectivamente un servicio de dominio donde recibe la factura y el repositorio pertinente... y es acá donde digo que los repositorios son de dominio (para retirar el “es como un servicio” encargado exclusivamente de tratar con tu sistema de persistencia) lo trataremos por su nombre diferenciador “Repositorio” entonces si bien remitiéndome a lo que Juan Manuel escribe sobre la capa de aplicación si bien allí es donde hace algo como esto:
 
Dominio.Repositorio.IRepositorioFactura facRepo =  new Infraestructura.Repositorio.RepositorioFactura(new UnidadDeTrabajo());
 
allí no es donde tu haces el facRepo.ObtenerFacturaParaValidar(123); o las consultas necesarias, estas creería las haces en dominio utilizando algo como Satisfy By o Policy o simplemente en código con un if haciendo visible tu regla de negocio por ende seria error grave (lo suelo cometer) migrar lógica de dominio a aplicación solo por que allí es donde instancias tu repositorio, ahora si tienes en cuenta lo que te digo en el punto 1 sobre repositorio, tu simplemente en tu dominio harias uso de tu repositorio para aplicar la regla de tu negocio y todo esto es posible por que quien define tu repositorio de Factura es tu dominio no tu capa de infraestructura o de aplicación.
 
Espero haya sido claro en mi forma de entender DDD y como se ve plasmada en este caso puntual, no soy un gurú, recién he empezado a trabajarlo seriamente con DDD y como viste en muchos casos en la practica hago todo lo contrarío  pero bueno es cuestión de tiempo corregir mis proyectos y mejorar.
 
 
Ahora para cerrar y no aburrir retomo mi inicial propuesta como verán de útil esta discusión pero sobre una investigación formal y tratando de generar código como recomienda DDD... bueno para mi sería genial espero y algún momento les suene la idea.
Sent: Tuesday, July 17, 2012 12:22 PM

Max Frank Gmail

unread,
Jul 18, 2012, 11:22:10 AM7/18/12
to altnet-...@googlegroups.com

Hola Martin,

 

Pues la verdad me alegra mucho que te haya quedado claro mi punto de vista, principalmente empecé al  revés el estudio sobre DDD, como te comentaba en esta serie de correos y ahora creo que es mejor concentrase en el objetivo de DDD (Domino, Lenguaje Ubicuo) y luego vas mirando como implementas todo lo relacionado con patrones y buenas prácticas…

 

Como dijo Jorge en este correo… su blog de arquitectura esta bueno para eso, para que veas como los patrones se aplican y diferentes “reglas/practicas” que DDD explica y sobre todo como se realizan en .Net, pero para todo esto te recomendaría sinceramente primero leer y releer a Evans <Una vez leí un libro de Carnieg sobre consejos de tratar a la gente y el en entre todo esto dijo algo genial: que para entender un cap de un libro debes leerlo primero para ver de qué trata, que dice el autor, y luego al releer si te enfocas en aprender lo que él te está queriendo enseñar en dicho capitulo.>

 

Igual y a mí me falta bastante para terminar ese libro y ni para que hago cuentas con los links del mapa mental que envió Jorge… pero bueno creo que es más lo que tengo para aprender que para enseñar pero hay vamos…

 

 

Cordialmente,

 

Max Frank Rodriguez H.

Transfiriendo S.A.

 

Ingeniero Desarrollador de Software.

@ingmaxfrank

http://learnmax.wordpress.com/

 

No imprimas este correo.

Deja de usar Papel  a menos que sea estrictamente necesario, este planeta te alimenta a diario y te provee oxigeno toda tu vida es justo que se le regrese el 1% de ese favor.

 

 

La investigación es mas valiosa que el conocimiento. –Alber Einstein-

 

 

 

De: altnet-...@googlegroups.com [mailto:altnet-...@googlegroups.com] En nombre de Martin Vecchione
Enviado el: Wednesday, July 18, 2012 9:41 AM
Para: altnet-...@googlegroups.com
Asunto: Re: [altnet-hispano] Re: Arquitectura DDD, es esto DDD?

 

Max,

 

 De verdad que me ha servido tu explicación...

 

 Entiendo a lo que te refieres con un dominio anemico, en un primer momento tuve una gran duda de agregarle a la entidad conocimiento de la persistencia para evitar un dominio anemico, pero terminaría cayendo en algo peor...

 

 Por lo pronto me he bajado el codigo de ejemplo que nos a enviado  Jhonnys López Celedon

 

  Como tu dices DDD es una metodologia y como tal es cuestion de perderle el miedo, ponerla en practica y tratar de corregir los errores que indefectiblemente van a surgir!

 

Muchas gracias por tu ayuda!!

El martes, 17 de julio de 2012 17:46:43 UTC-3, Max Rodriguez escribió:

Hola,

 

Ok intentare contestar desde mi punto de vista las dudas de este tema...

 

1.- si es correcto los repositorios se implementan en una capa intermedia llamada infraestructura pero lo fundamental en DDD es el DOMINIO principalmente, esto significa que cuando tu defines la forma como vas a obtener la información de tu sistema de persistencia <BD, txt, MomgoDB, Mocks... etc> especificas un reportorio para esto, técnicamente en código es una interfaz en tu dominio el hecho que tu la implementes en infraestructura, ella esta definida en tu dominio... por esto digo que son en parte “servicios de dominio” por que su funcionalidad es bríndale a nuestro dominio un método para acceder a tu sistema de persistencia. Ahora quiero hacer una aclaración puntual Unidad de trabajo no es mas que un patrón para realizar reunir las transacciones necesarias y ejecutarlas en un solo momento y no tiene nada que ver con CRUD o Paginación esta lógica esta implementada en el repositorio no en la Unidad de Trabajo... tanto así que el repositorio usa a la UoW y no al revés por ende el UoW no esta haciendo nada de CRUD simplemente esta lanzando un cola de peticiones pendientes en un solo momento a tu BD o sistema de persistencia.

 

2.- Primero que pasa si... es una pregunta que nunca podrás contestar por que sin un limite puedes hasta reinventar Windows y no terminar... pero esto es mas (Ingeniería de requerimientos) ahora comprendo tu pregunta y es un ejemplo diferente para ver que sucedería entonces yo lo solucionaría así. Primero mi factura es un agregado que contiene los detalles de la factura por ende mi factura es la única autorizada para hacer la suma de tus detalles, ahora bien puedes crear una clase que haga el metodo sumar detalles dentro de factura ó un servicio que llame a factura le pida la suma y el la de como resultado... en ultimas es una función exclusiva de la factura y es su responsabilidad como agregado realizar este calculo. En respuesta no seguiría siendo un método de tu factura ya que ella es la responsable del agregado... Ten cuidado por que siempre (yo termino ) haciendo dominios anémicos con entidades q solo tienen propiedades que son campos en la base de datos y 0 lógica y/o peor aun responsabilidad, los servicios de dominio son mas excepciones a la regla de cuando tu regla de negocio no encaja en tu entidad que tratar de poner todo en un servicio por que tiene algo como factura.detalle es algo a evaluar, pero repito siempre termino haciéndolo como no es por el tema de la costumbre de programar mal....

 

3.- en esta creo que de cierta forma me das la razón al primer punto pero desglosemos por partes:

 

3.1- Validación te recomiendo ver la forma como en N-Laver V2.0 realizar la validación de una entidad, me parece genial y muy limpia de hacerlo, sobre todo por que acumulas errores y se los muestras todos al usuario no estas enviando 1 por 1...

 

3.2- Si necesitas crear una validación contra la base de datos yo lo resolvería creando efectivamente un servicio de dominio donde recibe la factura y el repositorio pertinente... y es acá donde digo que los repositorios son de dominio (para retirar el “es como un servicio” encargado exclusivamente de tratar con tu sistema de persistencia) lo trataremos por su nombre diferenciador “Repositorio” entonces si bien remitiéndome a lo que Juan Manuel escribe sobre la capa de aplicación si bien allí es donde hace algo como esto:

 

Dominio.Repositorio.IRepositorioFactura facRepo =  new Infraestructura.Repositorio.RepositorioFactura(new UnidadDeTrabajo());

 

allí no es donde tu haces el facRepo.ObtenerFacturaParaValidar(123); o las consultas necesarias, estas creería las haces en dominio utilizando algo como Satisfy By o Policy o simplemente en código con un if haciendo visible tu regla de negocio por ende seria error grave (lo suelo cometer) migrar lógica de dominio a aplicación solo por que allí es donde instancias tu repositorio, ahora si tienes en cuenta lo que te digo en el punto 1 sobre repositorio, tu simplemente en tu dominio harias uso de tu repositorio para aplicar la regla de tu negocio y todo esto es posible por que quien define tu repositorio de Factura es tu dominio no tu capa de infraestructura o de aplicación.

 

Espero haya sido claro en mi forma de entender DDD y como se ve plasmada en este caso puntual, no soy un gurú, recién he empezado a trabajarlo seriamente con DDD y como viste en muchos casos en la practica hago todo lo contrarío  pero bueno es cuestión de tiempo corregir mis proyectos y mejorar.

 

 

Ahora para cerrar y no aburrir retomo mi inicial propuesta como verán de útil esta discusión pero sobre una investigación formal y tratando de generar código como recomienda DDD... bueno para mi sería genial espero y algún momento les suene la idea.

Sent: Tuesday, July 17, 2012 12:22 PM

Subject: Re: [altnet-hispano] Re: Arquitectura DDD, es esto DDD?

Hola! muchas gracias por tu respuesta, es verdad lo que dices, deberia volver a releer a Evans pero no es algo facil y tampoco de cambiar la forma de programar (como tu dices yo tmb estoy muy acostumbrado a programar contra la BD)...

 

Aprovechando el hilo de la conversacion (y teniendo en cuenta que no he leido de nuevo a Evans) hago un par de preguntas que espero no oscurezcan tus consejos/explicaciones...

 

1. Cuando dices que el repositorio son en parte servicios de dominio, ahi me entra la duda, los repositorios no son acceso a datos? como una capa intermedia entre mis servicios de dominio y la infraestructura??..

 

2. En tu ejemplo de retornar el total de la factura, que pasa si para obtener ese dato no se tengo que acceder a una tabla que me dice el total de la factura (supongamos que el total es la sumatoria de varios detalles). En ese caso si debería ser un servicio de dominio?

 

3. En el caso de las validaciones que requieren acceder a la BD para consultar un dato también entrarian dentro de un servicio de dominio?? o irían a la entidad (esto no me suena mucho ya que para hacer esto la entidad de alguna manera deberia conocer a la BD y para mi me suena a antipatron ?

 

 

Desde ya muchas gracias por tu tiempo!!

 

 

 

 

 

Saludos, y espero que mis consejos sean claros y beneficiosos.


El martes, 17 de julio de 2012 11:04:50 UTC-3, Max Rodriguez escribió:

Hola,

 

a la primera si efectivamente no son CRUD si bien contienen un CRUD por que ellos son los responsables de realizar las implementaciones de todo el acceso a datos el concepto es aun mas global y sobre todo cuando implementas UoW como tu bien lo dices.

 

A la segunda no estoy de acuerdo ya que primero los repositorios son en parte “servicios de dominio” son aquellos servicios que nos dan acceso a infraestructura para realizar operaciones con la BD, si bien lo que dices es cierto de las colecciones creo que es mas claro si dices << los repositorios hacen el trabajo contra la BD siempre utilizando nuestras entidades, esto quiere decir te regresan una Persona, Ciudad, Factura etc... pero nunca te regresan o insertan un DataRow con la información de una persona... para Repositorios vs CRUD creo esta es importante tener claro esto >> para mi hay esta la gran diferencia. Ahora el tema de los servicios de dominio y que solo controla las entidades en un principio lo maneje así pero ahora que eh leído a Evans creo que es mas conveniente decir que es cuando vas a hacer una operación que no encaja correctamente sobre una entidad. Me explico, Cuando tienes una factura y quieres sacar su total debes implementar una funcion returnTotal() dentro de Factura pero cuando quieres no se consolidar el impuesto de las facturas bajo cierto parámetro debes realizar un servicio de dominio que realice esta tarea sobre varias Facturas o de pronto y la consulta SOLO TE RETORNA 1 FACTURA entonces consolidas solo 1, pero esto no significa que tu factura deba consolidarse sola.

 

Ahora en cuanto a mi experiencia antes estaba muy orientado a programar sobre la BD, esto quiere decir que siempre hacia el modelo de BD y luego si la aplicación... leyendo a evans eh cambiado totalmente mi forma de pensar... ahora trato de organizar mi idea de aplicación (Diseño) en base a objetos.. al comienzo del libro evans muestra ciertos ejercicios donde el pinta un par de cuadros y rayas y evidencia como esto tratado como objetos traídos del experto del negocio a código tal cual brindan resultados geniales. De hay que te recomiende mejor ver la forma de diseñar, analizar y sobre todo céntrate mucho en el lenguaje ubicuo, el concepto del la relación con el experto del negocio y hay si creo encontraras los mayores beneficios que brinda DDD después ya aplicaras y te preocuparas por las reglas de repositorio, specify by, loggin, trace, poco, selft-tracking y demás. Yo inicie así tanto así que primero leí el N-Capas de microsoft que te recomendé antes que a Evans (Grave error) pero ahora que estoy leyendo a Evans eh entendido mucho mas lo que en N-Layer quieren hacer.

 

Saludos, y espero que mis consejos sean claros y beneficiosos.

Sent: Monday, July 16, 2012 10:26 PM

Subject: Re: [altnet-hispano] Re: Arquitectura DDD, es esto DDD?

Aun que no lei todo, veo sobre tu resumen lo siguiente:

 

Repositorio => NO es CRUD, es presentar el acceso a datos como una colección; quien finalmente persite los datos es la Unidad de Trabajo.
Servicios del Dominio => NO conocen los repositorios, solo realizan operaciones entre Entidades.; esto con el fin de aplicar TestUnitarios a la capa del dominio sin depender de los repositorios.


El lunes, 16 de julio de 2012 15:27:52 UTC-5, Max Rodriguez escribió:

Hola,

 

 

discúlpame creo que el error era mas de capa 8 jejeje por que daba click sobre el link y me enviaba a algo de outlook pero copiando y pegando sobre el browser si me funciona...

Esta buenísima la herramienta y la forma de organizar una investigación creo que me copiare del método....

 

 

Y pues con el tiempo les iré contando los resultados de la lectura para generar mas debate e ir construyendo mucho mas sobre DDD en este grupo la verdad me apasiona mucho este tema de la arquitectura de software y por ahora estaré centrado en DDD y TDD ya mirare cuando termine todo eso con que continuar  si es que para cuando termine no este mando a recoger todo lo que leí...

 

 

 

Gracias,

 

Sent: Monday, July 16, 2012 3:13 PM

Subject: Re: [altnet-hispano] Re: Arquitectura DDD, es esto DDD?

Va de nuevo (se me escapo el send):

 

 

Saludos

 

Jorge

 

On Tue, Jul 17, 2012 at 6:07 AM, Jorge Fioranelli <jorge.fi...@gmail.com> wrote:

 

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.

Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com


Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/7iwwhJVRXzAJ.

Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com


Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/HbsPAHPB4TYJ.

Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com


Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.

Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/Jpi9SELwCmwJ.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com

Reply all
Reply to author
Forward
0 new messages