Есть ли преимущество в передаче оболочки пользовательского интерфейса в представление - PullRequest
2 голосов
/ 18 сентября 2008

Большинство сэмплов MVC, которые я видел, передают экземпляр вида контроллеру, как это

public class View  
{  
Controller controller = new Controller(this);  
}

Есть ли преимущество в передаче класса, который предоставляет доступ только к тем свойствам и событиям, которые интересует контроллер, например:

public class UIWrapper
{
private TextBox textBox;

public TextBox TextBox
{
get {return textBox;}
}

public UIWrapper(ref TextBox textBox)
{
this.textBox = textBox;
}


public class View
{
UIWrapper wrapper = new UIWrapper(this);
Controller controller = new Controller(wrapper)
}

Ответы [ 2 ]

1 голос
/ 18 сентября 2008

Это зависит от вашей архитектуры. Если вы все на одном уровне, то вы можете обойтись без оболочки, хотя я бы, вероятно, передал интерфейс, который View реализует, в Controller. Функционально и с точки зрения связывания подход интерфейса и подход обертки эквивалентны.

Однако, если пользовательский интерфейс находится на одном уровне, а контроллер - на другом, передача / сериализация всего объекта View может быть неудобной или даже неэффективной. В таких случаях вы можете передавать DTO туда-сюда, что будет проще для сериализации и, возможно, более эффективно.

Я склоняюсь к подходу DTO, поскольку, если ваша архитектура расширяется, все, что вам нужно сделать, это сериализовать и десериализовать.

Кроме того, если ваш вид сложен и содержит много фрагментов данных для передачи назад и вперед с контроллером, вы можете начать бороться с запахом длинного списка параметров с помощью В любом случае ввести объект параметра , что по сути DTO.

Еще одна вещь, которую вы должны пережить: для сложного представления Контроллеру в конечном итоге потребуется отобразить множество фрагментов данных в различные текстовые поля и другие элементы управления пользовательского интерфейса в представлении. То же самое в обратном порядке: View в конечном итоге получает данные из множества элементов управления и передает их различным методам в вашем контроллере.

Мне нравится разделять эти два. Я даю Views DTO и считаю, что View должен знать, где «подключить» и «отключить» каждый фрагмент данных. Что касается данных, то и View, и Controller теперь связаны только с DTO.

1 голос
/ 18 сентября 2008

Есть хорошая серия сообщений Джереми Миллера относительно триады MVC / MVP. В частности, вас может заинтересовать part 6 , в котором подробно рассматриваются связи между представлением и контроллером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...