Мне нравится, когда мой уровень обслуживания хранит сущности, инкапсулированные в нем, и возвращает / получает только DTO.Я храню сервисные контракты, а также DTO в отдельной сборке, на которую ссылаются и проект MVC, и ссылка на реализацию Сервиса.
Внутри реализации сервисного вызова сервис отображает dto на сущности, затем выполняет взаимодействие с репозиториями.и другие сущности, как это необходимо.
В проекте app / mvc я иногда становлюсь ленивым и просто использую DTO в качестве моделей для определенных действий (особенно CRUDy).Если мне понадобится проекция или что-то в этом роде, я создам модель представления и конвертирую между DTO и моделью представления с помощью автоматического обработчика и т. Д.
То, насколько уязвимы ваши сущности, является предметом многих споров.Некоторые люди проталкивают их до уровня представления / приложения.Я предпочитаю держать их на уровне обслуживания.Я обнаружил, что, когда сущности покидают сервисный уровень, вы обнаруживаете, что делаете вещи типа бизнес-логики в любом месте, где они взаимодействуют, вещи, которые, вероятно, должны находиться в службе.