Автоматический layout гуя типичной опердени
Как известно, в оперденях большое количество кода реализует один типичный класс операций - ввод первичных данных.
Безотносительно к тому, что оно все херово обобщаемое даже на уровне работы с сугубо данными (нетривиальные зависимости, которые без sum types плохо моделировать, валидация из разряда "юзеры, умершие 15 нисана получают дополнительную жизнь, если в поле father написано God" и прочее такое) есть еще одна проблема, решения которой, отличного от "специально назначенные женщины-программисты рисуют гуй руками" я не видел.
А именно - layout интерфейса. Обычно оные окна ввода выглядят как 10-20-50 контролов вида "имя поля, данные поля, дополнительные данные вычисляемые из поля (подпись из справочника), кнопочька для вызова справочника или календаря". И если это чюдо не выровнять аккуратно - интерфейс начинает выглядеть как говно. При этом, если интерфейс используется для разных языков - то оно должно быть выравнено еще и для разных длин строк. А еще, желательно, чтобы окно можно было ресайзить и чтобы поля интерфейса ресайзились соответственно, да еще и с учетом допустимых значений (например, целочисленное поле нету смысла ресайзить больше чем 11 символов*ширину символа+хрен пойми какой отступ, зависящий от темы, версии ос, DPI и хрен знает чего, аналогично для дат и прочего).
В итоге, получается, что даже в простейшем случае "вертикально расположены 10 полей ввода" - нужно выровнять их подписи согласно их реальному размеру, учесть идиотизм с отступами, ClientSize, Margin, Padding и прочей чернью, затем выровнять сами поля ввода, выровнять зависимые поля, выровнять кнопочьки справочников и прочую чернягу, сделать минимальный размер окна таким, чтобы это все влазило и было читабельным, проверить на разных dpi, языках, темах UI и версиях виндов, включая модифицированные zvercd-cool-fucked-up-ui-edition и все это очень сильно огорчает.
Простейшие случаи я как-то автоматизировал, но радости все равно не возникает, малейшее дополнение в требованиях, типа "вместо одной кнопки справочника - две для разных действий" и вся генерация гуя ломается. А писать/рисовать гуй вручную, особенно в проклятых дизайнерах - это унижение для разумных существ.
Безотносительно к тому, что оно все херово обобщаемое даже на уровне работы с сугубо данными (нетривиальные зависимости, которые без sum types плохо моделировать, валидация из разряда "юзеры, умершие 15 нисана получают дополнительную жизнь, если в поле father написано God" и прочее такое) есть еще одна проблема, решения которой, отличного от "специально назначенные женщины-программисты рисуют гуй руками" я не видел.
А именно - layout интерфейса. Обычно оные окна ввода выглядят как 10-20-50 контролов вида "имя поля, данные поля, дополнительные данные вычисляемые из поля (подпись из справочника), кнопочька для вызова справочника или календаря". И если это чюдо не выровнять аккуратно - интерфейс начинает выглядеть как говно. При этом, если интерфейс используется для разных языков - то оно должно быть выравнено еще и для разных длин строк. А еще, желательно, чтобы окно можно было ресайзить и чтобы поля интерфейса ресайзились соответственно, да еще и с учетом допустимых значений (например, целочисленное поле нету смысла ресайзить больше чем 11 символов*ширину символа+хрен пойми какой отступ, зависящий от темы, версии ос, DPI и хрен знает чего, аналогично для дат и прочего).
В итоге, получается, что даже в простейшем случае "вертикально расположены 10 полей ввода" - нужно выровнять их подписи согласно их реальному размеру, учесть идиотизм с отступами, ClientSize, Margin, Padding и прочей чернью, затем выровнять сами поля ввода, выровнять зависимые поля, выровнять кнопочьки справочников и прочую чернягу, сделать минимальный размер окна таким, чтобы это все влазило и было читабельным, проверить на разных dpi, языках, темах UI и версиях виндов, включая модифицированные zvercd-cool-fucked-up-ui-edition и все это очень сильно огорчает.
Простейшие случаи я как-то автоматизировал, но радости все равно не возникает, малейшее дополнение в требованиях, типа "вместо одной кнопки справочника - две для разных действий" и вся генерация гуя ломается. А писать/рисовать гуй вручную, особенно в проклятых дизайнерах - это унижение для разумных существ.
no subject
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
no subject
А если ресурсов нет, то используется какой-нибудь готовый грид типа "простыня". Ибо нефиг.
no subject
no subject
no subject
(no subject)
no subject
2) Надо, чтобы бизнесс-лоджик вызывал гуй, а не наоборот. Чтобы гуй можно было делать из repl. Тогда проще писать тесты, лучше модульность, все дела
3) Я обычно делаю маленькие вьюшки на жутком Хамле без С# или с минимумом C#. MVC-биндинг (или SmartUI обвеска в зависимости от задачи) и вся логика Гуя - на F#, так проще жить
(no subject)
(no subject)
no subject