![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Как известно, в оперденях большое количество кода реализует один типичный класс операций - ввод первичных данных.
Безотносительно к тому, что оно все херово обобщаемое даже на уровне работы с сугубо данными (нетривиальные зависимости, которые без 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
Date: 2015-08-07 10:03 am (UTC)no subject
Date: 2015-08-07 10:09 am (UTC)no subject
Date: 2015-08-07 11:46 am (UTC)no subject
Date: 2015-08-07 12:54 pm (UTC)no subject
Date: 2015-08-07 05:23 pm (UTC)no subject
Date: 2015-08-07 10:03 am (UTC)no subject
Date: 2015-08-07 10:29 am (UTC)no subject
Date: 2015-08-07 10:46 am (UTC)no subject
Date: 2015-08-07 01:02 pm (UTC)no subject
Date: 2015-08-07 10:56 am (UTC)no subject
Date: 2015-08-07 11:10 am (UTC)no subject
Date: 2015-08-07 11:13 am (UTC)no subject
Date: 2015-08-07 11:14 am (UTC)no subject
Date: 2015-08-07 11:39 am (UTC)И зоопарк технологий!
Всё как вы любите.
no subject
Date: 2015-08-07 03:52 pm (UTC)no subject
Date: 2015-08-07 11:02 am (UTC)no subject
Date: 2015-08-07 11:08 am (UTC)no subject
Date: 2015-08-07 11:10 am (UTC)no subject
Date: 2015-08-07 11:28 am (UTC)no subject
Date: 2015-08-07 11:36 am (UTC)no subject
Date: 2015-08-07 08:46 pm (UTC)так что разницы не будет
no subject
Date: 2015-08-07 11:16 am (UTC)no subject
Date: 2015-08-07 11:29 am (UTC)no subject
Date: 2015-08-07 11:38 am (UTC)no subject
Date: 2015-08-07 11:42 am (UTC)no subject
Date: 2015-08-07 01:17 pm (UTC)А если ресурсов нет, то используется какой-нибудь готовый грид типа "простыня". Ибо нефиг.
no subject
Date: 2015-08-07 03:22 pm (UTC)no subject
Date: 2015-08-07 03:37 pm (UTC)no subject
Date: 2015-08-07 03:55 pm (UTC)no subject
Date: 2015-08-07 04:46 pm (UTC)no subject
Date: 2015-08-07 04:04 pm (UTC)2) Надо, чтобы бизнесс-лоджик вызывал гуй, а не наоборот. Чтобы гуй можно было делать из repl. Тогда проще писать тесты, лучше модульность, все дела
3) Я обычно делаю маленькие вьюшки на жутком Хамле без С# или с минимумом C#. MVC-биндинг (или SmartUI обвеска в зависимости от задачи) и вся логика Гуя - на F#, так проще жить
no subject
Date: 2015-08-07 04:08 pm (UTC)no subject
Date: 2015-08-07 04:25 pm (UTC)no subject
Date: 2015-08-08 10:11 am (UTC)