Могут ли данные объекта передачи данных соответствовать потребностям пользовательского интерфейса
Объект передачи данных содержит данные из нескольких бизнес-объектов, отправленных клиенту.
Но должны ли эти данные и их структура быть дополнительной настройкой для клиента, чтобы соответствовать его потребностям связывания?
Или я должен дополнительно создать ViewModel для этого?
Это небольшое приложение, так что я сомневаюсь в том, что слишком много избыточной архитектуры, и dto's будет на 90% таким же, как модели представления...
DTO будут переданы с спокойного сервера клиенту javascript, не более.
2 ответа
Я думаю, что нужно учитывать, какие различия существуют между ВМ и DTO. Некоторое время назад я пытался создать модели представления C#, которые реализовывали, содержали или содержали контракт DTO, а также все компоненты, ориентированные на представление, такие как параметры списка выбора и свойства фильтра. Я обнаружил, что это громоздко, хрупко и влажно (в отличие от СУХОГО;).
С тех пор я перешел к определению моделей представления в JavaScript и разрешению, чтобы объекты DTO содержали только свойства, необходимые для удовлетворения договорных ожиданий уровня обслуживания. Я опускаю данные, используя ajax. Данные обычно передаются в представление в том формате, в котором они были получены от службы. Затем я обновляю свои привязанные к данным, наблюдаемые модели представления нокаута. Пока что эта модель была действительно продуктивной для меня.
Что касается проверки входных данных, пока мы говорим об атрибутах проверки, я думаю, что это прекрасно, что у вас есть атрибуты проверки, определенные в вашем DTO. В конце концов, ваш контроллер API имеет ModelState по причине. К сожалению, нет действительно хорошего метода для преобразования этой проверки в ваши привязанные к клиенту представления. Таким образом, я опирался на проверку нокаута больше, чем проверку MVC. Однако я надеюсь, что есть лучшее решение для проверки правильности решения!
Мне нравится рассматривать представления, которые я получаю, как проводные представления моей ViewModel. Во многих случаях нет необходимости проводить различие между ViewModel и DTO.