Информация об изменениях

Сообщение Связывание форм (GUI) с данными: императивно vs декларативно от 29.07.2019 19:01

Изменено 29.07.2019 19:13 Shmj

Связывание форм (GUI) с данными: императивно vs декларативно
Почему все верят, что декларативный подход рулит и на порядок упрощает работу?

Вот, давайте на примере. Есть поле на форме, вам нужно установить дату и подсветить, если дата нечетная.

Императивный подход (примерно):

DateTextBox.Text = UIConverter.ConvertToText(businessObject.Date);

if (businessObject.Date.IsOdd)
   DateTextBox.Background = Color.Red;


Декларативный подход типа:

<Window.Resources>
        <local:DateBacklightConverter x:Key="dateBacklightConverter" />
</Window.Resources>

<TextBox Text="{Binding Date}" Background="{Binding Source=Date,Converter={StaticResource dateBacklightConverter}}" />


Теперь давайте какие реальные плюсы у т.н. декларативного? Букв меньше не стало. Совокупная сложность кода не понизилась — все равно в конвертере есть проверка if и выбор цвета. В XML-е писать не удобнее, но даже не в этом суть.

Только вера в то, что декларативно типа круче?

Ну ОК, вы скажите что ковертор можно будет задействовать в другом месте. Но! Что мешает мне вынести:

if (businessObject.Date.IsOdd)
   DateTextBox.Background = Color.Red;


— в отдельный метод и просто его вызывать? Вам для конвертора придется целый класс содавать а мне — только метод.

Получается, что никакого реального преимущества, кроме хайпа, нет
Связывание форм (GUI) с данными: императивно vs декларативно
Почему все верят, что декларативный подход рулит и на порядок упрощает работу?

Вот, давайте на примере. Есть поле на форме, вам нужно установить дату и подсветить, если дата нечетная.

Императивный подход (примерно):

DateTextBox.Text = UIConverter.ConvertToText(businessObject.Date);

if (businessObject.Date.IsOdd)
   DateTextBox.Background = Color.Red;


Декларативный подход типа:

<Window.Resources>
        <local:DateBacklightConverter x:Key="dateBacklightConverter" />
</Window.Resources>

<TextBox Text="{Binding Date}" Background="{Binding Source=Date,Converter={StaticResource dateBacklightConverter}}" />


Теперь давайте какие реальные плюсы у т.н. декларативного? Букв меньше не стало. Совокупная сложность кода не понизилась — все равно в конвертере есть проверка if и выбор цвета. В XML-е писать не удобнее, но даже не в этом суть.

Только вера в то, что декларативно типа круче?

Ну ОК, вы скажите что ковертор можно будет задействовать в другом месте. Но! Что мешает мне вынести:

if (businessObject.Date.IsOdd)
   DateTextBox.Background = Color.Red;


— в отдельный метод и просто его вызывать? Вам для конвертора придется целый класс содавать а мне — только метод.

Подозреваю что начнут приводить преимущества т.н. двустороннего связывания и обработки событий изменения данных. У меня есть что ответить на это, но подожду пока скажут.

Получается, что никакого реального преимущества, кроме хайпа, нет