He visto muchas preguntas relacionadas con la asignación de DTO a objetos de dominio, pero no creo que hayan respondido mi pregunta. He usado muchos métodos antes y tengo mis propias opiniones, pero estoy buscando algo un poco más concreto.¿Mejores prácticas para asignar DTO al objeto de dominio?
La situación:
Tenemos muchos objetos de dominio. Estamos utilizando un modelo de CSLA para que nuestros objetos de dominio puedan ser bastante complejos y que tengan su propio acceso a los datos. No quiere pasar esto por el cable. Vamos a escribir algunos servicios nuevos que devolverán datos en varios formatos (.Net, JSON, etc.). Por esto (y por otros motivos), también estamos creando un objeto de transferencia de datos delgado para pasar por el cable.
Mi pregunta es ¿cómo se deben conectar el DTO y el objeto de dominio?
Mi primera reacción es usar Fowler, DTO pattern-type solution. 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 "asignador" o "ensamblador") para crear un DTO a partir de un objeto de dominio. Normalmente hay un ORM en el lado del objeto del dominio. La desventaja de esto es que el "mapeador" tiende a ser 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 pobre. Las propiedades del objeto de dominio hacen referencia internamente a las propiedades de DTO y pueden simplemente devolver el DTO si así lo solicita. No veo problemas con esto, pero se siente mal. He visto algunos artículos donde las personas que usan NHibernate parecen usar este método.
¿Hay otras formas? ¿Vale la pena usar una de las formas anteriores? Si es así o no, ¿por qué?
Gracias por cualquier idea con anticipación.
El automapper parece interesante. He visto un montón de código antes de que lo hubiera reemplazado. Mi principal problema es que, si por alguna razón me voy a quedar con un montón de código de mapeo, preferiría tener el control sobre mí mismo. –
Cuando pasamos de DTO _to_ Domain Objects, esa asignación es 100% manual. Es un problema mucho más difícil de resolver, ya que tratamos de mantener nuestros objetos de dominio basados en operaciones, en lugar de solo contenedores de datos. Ir a un DTO, es un problema fácil de resolver. –
Estoy de acuerdo en que es incorrecto que el objeto de dominio no tenga conocimiento del objeto dto. Si bien pueden estar relacionados en este caso, su propósito es completamente independiente (los dtos generalmente están hechos para el propósito) y usted estaría creando una dependencia innecesaria. – Sinaesthetic