Как предотвратить DTO при использовании asp.net MVC с сервисами домена

У меня есть хранилища и сервисы. Службы либо организуют множественные вызовы репозитория, либо выполняют некоторую логику данных в памяти, объединенную с вызовами репозитория, так что я хочу вернуть DTO. Эти DTO затем идеально подходят для пользовательского интерфейса. Но... Я использую asp.net mvc, и мои сервисы будут возвращать DTO на контроллер mvc, где мне понадобятся модели просмотра. Но мои DTO уже почти похожи на ViewModels. Единственное исключение - мои DTO не имеют атрибутов Validation, потому что они действительно принадлежат моделям представления.

Что еще я могу сделать, если использование DTO и viewmodels вместе кажется многим?

1 ответ

Решение

Вот несколько вариантов, которые вы можете рассмотреть.
Вы можете выбирать между вариантами в зависимости от ваших требований и масштаба вашего приложения:

  • Вы можете использовать объект-объект сопоставления, как AutoMappper
  • Вы можете передать свои DTO конструктору ваших ViewModels.
  • Вы можете использовать открытый статический метод ваших ViewModels, чтобы создать экземпляр ViewModels из DTO.
  • В ваших ViewModels вы можете наследовать от ваших DTO и использовать класс метаданных для атрибутов проверки, а затем украсить свой класс ViewModel с помощью [MetadadaType(typoef(YourMetadataClass))]
  • Вы можете использовать свои DTO в качестве ViewModel, и аналогичный предыдущий вариант использовать класс метаданных для атрибутов проверки, а затем украсить свой класс ViewModel с [MetadadaType(typoef(YourMetadataClass))]

Также я предполагаю, что ваши DTO находятся в отдельной dll, чем ваша сервисная библиотека.

Другие вопросы по тегам