Сообщение Связывание форм (GUI) с данными: императивно vs декларативно от 29.07.2019 19:01
Изменено 29.07.2019 19:13 Shmj
Связывание форм (GUI) с данными: императивно vs декларативно
Почему все верят, что декларативный подход рулит и на порядок упрощает работу?
Вот, давайте на примере. Есть поле на форме, вам нужно установить дату и подсветить, если дата нечетная.
Императивный подход (примерно):
Декларативный подход типа:
Теперь давайте какие реальные плюсы у т.н. декларативного? Букв меньше не стало. Совокупная сложность кода не понизилась — все равно в конвертере есть проверка if и выбор цвета. В XML-е писать не удобнее, но даже не в этом суть.
Только вера в то, что декларативно типа круче?
Ну ОК, вы скажите что ковертор можно будет задействовать в другом месте. Но! Что мешает мне вынести:
— в отдельный метод и просто его вызывать? Вам для конвертора придется целый класс содавать а мне — только метод.
Получается, что никакого реального преимущества, кроме хайпа, нет
Вот, давайте на примере. Есть поле на форме, вам нужно установить дату и подсветить, если дата нечетная.
Императивный подход (примерно):
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 декларативно
Почему все верят, что декларативный подход рулит и на порядок упрощает работу?
Вот, давайте на примере. Есть поле на форме, вам нужно установить дату и подсветить, если дата нечетная.
Императивный подход (примерно):
Декларативный подход типа:
Теперь давайте какие реальные плюсы у т.н. декларативного? Букв меньше не стало. Совокупная сложность кода не понизилась — все равно в конвертере есть проверка if и выбор цвета. В XML-е писать не удобнее, но даже не в этом суть.
Только вера в то, что декларативно типа круче?
Ну ОК, вы скажите что ковертор можно будет задействовать в другом месте. Но! Что мешает мне вынести:
— в отдельный метод и просто его вызывать? Вам для конвертора придется целый класс содавать а мне — только метод.
Подозреваю что начнут приводить преимущества т.н. двустороннего связывания и обработки событий изменения данных. У меня есть что ответить на это, но подожду пока скажут.
Получается, что никакого реального преимущества, кроме хайпа, нет
Вот, давайте на примере. Есть поле на форме, вам нужно установить дату и подсветить, если дата нечетная.
Императивный подход (примерно):
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;
— в отдельный метод и просто его вызывать? Вам для конвертора придется целый класс содавать а мне — только метод.
Подозреваю что начнут приводить преимущества т.н. двустороннего связывания и обработки событий изменения данных. У меня есть что ответить на это, но подожду пока скажут.
Получается, что никакого реального преимущества, кроме хайпа, нет