Я (ре) разрабатываю крупномасштабное приложение, мы используем многоуровневую архитектуру на основе DDD.
У нас есть MVC с уровнем данных (реализация репозиториев), доменный уровень (определение модели домена и интерфейсов - репозитории, службы, единица работы), уровень обслуживания (реализация услуг). До сих пор мы используем модели домена (в основном сущности) по всем слоям, и мы используем DTO только как модели представления (в контроллере, службе возвращается модель (и) домена, а контроллер создает модель представления, которая передается в представление).
Я читал бесчисленные статьи об использовании, а не использовании, сопоставлении и передаче DTO. Я понимаю, что нет никакого окончательного ответа, но я не уверен, нормально ли он или нет, возвращая модели домена из сервисов в контроллеры. Если я возвращаю модель домена, она все равно никогда не переходит к представлению, так как контроллер всегда создает модель представления с учетом вида - в этом случае она кажется законной. С другой стороны, это не кажется правильным, когда модель домена покидает бизнес-уровень (уровень обслуживания). Иногда службе необходимо вернуть объект данных, который не был определен в домене, и нам нужно либо добавить новый объект в домен, который не отображается, либо создать объект POCO (это уродливо, так как некоторые службы возвращают модели домена, некоторые эффективно возвращать DTO).
Вопрос: если мы строго используем модели просмотра, нормально ли возвращать модели домена до контроллера, или мы всегда должны использовать DTO для связи со слоем услуг? Если да, нормально ли настраивать модели домена на основе того, какие услуги нужны? (Честно говоря, я так не думаю, так как службы должны потреблять то, что у домена.) Если мы должны строго придерживаться DTO, следует ли их определять на уровне обслуживания? (Я так думаю.) Иногда ясно, что мы должны использовать DTO (например, когда служба выполняет много бизнес-логики и создает новые объекты), иногда ясно, что мы должны использовать только модели домена (например, когда служба членства возвращает anemic User ( s) - кажется, не имеет смысла создавать DTO, что совпадает с моделью домена), но я предпочитаю последовательность и хорошие практики.
Статья Домен против DTO и ViewModel - как и когда их использовать? (а также некоторые другие статьи) очень похожа на мою проблему, но она не ответьте на этот вопрос (ы). Статья Должен ли я использовать DTO в шаблоне репозитория с EF? также аналогичен, но он не имеет отношения к DDD.
Отказ от ответственности: я не намерен использовать какой-либо шаблон дизайна только потому, что он существует и является фантастическим, с другой стороны, я хотел бы использовать хорошие шаблоны проектирования и практики также потому, что он помогает разрабатывать приложение в целом, помогает с разделением проблем, даже если использование определенного шаблона не является "необходимым", по крайней мере, на данный момент.
Как всегда, спасибо.