metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2008-11-25 04:11 pm

И еще

Писать GUI на хаскеле - это все равно, что писать GUI на SQL.

Если обернуть фразу - то для того, чтобы сделать нормальный GUI фреймворк для хаскеля (а не сплошную имитацию императивщины на монадах), нужно представить GUI в декларативно-функционально-теоретико-множественном стиле :)

[identity profile] g-rub.livejournal.com 2008-11-25 04:30 pm (UTC)(link)
Давненько уже гуйню не писал, но что-то мне кажется что явным образом включать-выключать кнопки меню из обработчика табличного поля -- прямая дорога в ад.

[identity profile] 1ceheart.livejournal.com 2008-11-25 06:38 pm (UTC)(link)
+1, но умение перерисовывать часть модели (и соответственно, знание того, какая часть была изменена) часто довольно важно, даже в вебморде, иначе никакого сервера не хватит. А если я 3D-чертеж на экране отображаю, то "перерисовать view" - это может вечность занять. Жизнь все-таки сложнее голых схем, но глобально, конечно, енаблить кнопку по нажатию другой кнопки не сильно кошерно :)

[identity profile] metaclass.livejournal.com 2008-11-25 07:45 pm (UTC)(link)
Я думал после того, как сделаю общую функциональность, оптимизировать это дело методом вычисления диффа между объектами, потом по этому диффу вычислить дифф для view объекта.
Но как всегда, сначала на это дело не хватило времени, а потом проект законсервировался, т.к. тендер выиграла другая контора :)

[identity profile] g-rub.livejournal.com 2008-11-25 10:31 pm (UTC)(link)
Ну как бы "сказать части view перерисовать себя" и "из напрямую из контроллера модифицировать отображение" -- две ооочень большие разницы.

:)

Потом другой контроллер модифицирует то же отображение по-своему, и дальше начнется, потом третий контроллер попробует эту кнопку "восстановить в исходную позицию" сообразно своей логике...

И готово.

[identity profile] metaclass.livejournal.com 2008-11-25 07:55 pm (UTC)(link)
Да, так и есть.
Альтернатива дороге в ад - отладка вызовов функций 20-уровневой вложенности - от кнопки до модели и обратно до view :)

[identity profile] g-rub.livejournal.com 2008-11-25 10:34 pm (UTC)(link)
Хранить логическое состояние хотя бы в соответствующих переменных-атрибутах формы не судьба?

И включать-выключать кнопки по итогам чтения этого состояния, а не по воле контроллера?

А обмен сигналами об изменении -- через простенький диспетчер, решающий кому надо перерисовываться по итогам изменения набора переменных?

Не вижу что-то тут 20 уровней вложенности.
Банальное отделение логики от представления.

[identity profile] g-rub.livejournal.com 2008-11-25 11:14 pm (UTC)(link)
В MVC не 20 уровней, а 3.
Соответственно, направлений взаимодействия -- никак не может быть больше 6 (а реально -- 3-5).

Зато один раз написанный и оттестированный MVC-каркас (вкупе с соответствующим проектированием остальной части) всерьез и надолго избавляет от побочных эффектов и непредсказуемого роста сложности в дальнейшем.