Это зависит от вашей архитектуры. Если вы все на одном уровне, то вы можете обойтись без оболочки, хотя я бы, вероятно, передал интерфейс, который View реализует, в Controller. Функционально и с точки зрения связывания подход интерфейса и подход обертки эквивалентны.
Однако, если пользовательский интерфейс находится на одном уровне, а контроллер - на другом, передача / сериализация всего объекта View может быть неудобной или даже неэффективной. В таких случаях вы можете передавать DTO туда-сюда, что будет проще для сериализации и, возможно, более эффективно.
Я склоняюсь к подходу DTO, поскольку, если ваша архитектура расширяется, все, что вам нужно сделать, это сериализовать и десериализовать.
Кроме того, если ваш вид сложен и содержит много фрагментов данных для передачи назад и вперед с контроллером, вы можете начать бороться с запахом длинного списка параметров с помощью В любом случае ввести объект параметра , что по сути DTO.
Еще одна вещь, которую вы должны пережить: для сложного представления Контроллеру в конечном итоге потребуется отобразить множество фрагментов данных в различные текстовые поля и другие элементы управления пользовательского интерфейса в представлении. То же самое в обратном порядке: View в конечном итоге получает данные из множества элементов управления и передает их различным методам в вашем контроллере.
Мне нравится разделять эти два. Я даю Views DTO и считаю, что View должен знать, где «подключить» и «отключить» каждый фрагмент данных. Что касается данных, то и View, и Controller теперь связаны только с DTO.