He visto muchas preguntas relacionadas con la asignación de DTO a objetos de dominio, pero no sentí que respondieran a mi pregunta. He usado muchos métodos antes y tengo mis propias opiniones, pero estoy buscando algo un poco más concreto.
La situación:
Tenemos muchos objetos de dominio. Estamos utilizando un modelo CSLA, por lo que nuestros objetos de dominio pueden ser bastante complejos y contienen su propio acceso a datos. No conviene pasarlos por el cable. Vamos a escribir algunos servicios nuevos que devolverán datos en varios formatos (.Net, JSON, etc.). Por esta (y otras razones) también estamos creando un objeto de transferencia de datos esbelto para pasar por el cable.
Mi pregunta es: ¿Cómo se deben conectar el objeto DTO y el dominio?
Mi primera reacción es usar una solución de tipo patrón DTO de Fowler . He visto esto muchas veces y me parece bien. El objeto de dominio no contiene ninguna referencia al DTO. Se llama a una entidad externa (un "mapeador" o "ensamblador") para crear un DTO a partir de un objeto de dominio. Normalmente hay un ORM en el lado del objeto de dominio. La desventaja de esto es que el "mapeador" tiende a volverse extremadamente complejo para cualquier situación real y puede ser muy frágil.
Otra idea presentada es que el objeto de dominio "contenga" el DTO, ya que es solo un objeto de datos ajustado. Las propiedades del objeto de dominio harían referencia internamente a las propiedades del DTO y podrían devolver el DTO si se lo solicita. No veo ningún problema con esto, pero se siente mal. He visto algunos artículos en los que las personas que utilizan NHibernate parecen utilizar este método.
¿Hay otras formas? ¿Vale la pena usar una de las formas anteriores? Si es así o no, ¿por qué?