Как предотвратить 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, чем ваша сервисная библиотека.