Я бачив багато запитань, пов’язаних із зіставленням DTO до об’єктів домену, але я не відчував, що вони відповіли на моє запитання. Я вже використовував багато методів і маю власну думку, але шукаю щось більш конкретне.
Ситуація:
У нас багато об’єктів домену. Ми використовуємо модель CSLA, тому наші об’єкти домену можуть бути досить складними і вони містять власний доступ до даних. Ви не хочете передавати їх по дроту. Ми будемо писати деякі нові сервіси, які повертатимуть дані у різних форматах (.Net, JSON тощо). З цієї причини (та з інших причин) ми також створюємо м'який об'єкт передачі даних, який буде передаватися по дроту.
Моє запитання: Як об'єднати об'єкт DTO та Domain?
Моя перша реакція полягає у використанні рішення Фаулера типу DTO . Я бачив це багато разів, і це мені здається правильним. Об'єкт домену не містить посилання на DTO. Зовнішня сутність ("mapper" або "асемблер") викликається для створення DTO з об'єкта домену. Зазвичай на стороні об'єкта домену є ORM . Недоліком цього є те, що "картограф", як правило, стає надзвичайно складним для будь-якої реальної ситуації і може бути дуже крихким.
Інша ідея, що висувається, полягає в тому, щоб об'єкт домену "містив" DTO, оскільки це просто постний об'єкт даних. Властивості об’єкта домену внутрішньо посилаються на властивості DTO і можуть просто повернути DTO, якщо про це попросять. Я не бачу проблем із цим, але відчуваю себе неправильно. Я бачив деякі статті, де люди, які використовують NHibernate, використовували цей метод.
Чи є інші шляхи? Чи варто використовувати один із наведених вище способів? Якщо так чи ні, чому?