metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-10-18 09:58 pm

Об удобном софте для сложных предметных областей.

Каждый раз, когда я читаю [livejournal.com profile] justy_tylor или когда меня очередной раз посещает навязчивая идея сделать генерацию UI из моделей (как у меня генерируется все остальное), я вспоминаю вот эту картинку http://ips.intermech.ru/images/s1_big.png или интерфейс 3D Max или CadSoft Eagle.

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

У меня софт обычно простой. Потому что предметка вся это "ввести первичные данные, получить данные с 100500 приборов и желязяк и показать по ним отчеты", ресурсы ограничены, UI делать некому, соответственно все по максимуму сводится к обобщенным CRUD-оперденям. А бэк-енды, базы данных и бизнес-логика, когда она не особо связана с UI - для меня это отдых. Потому как в большинстве случаев укладывается в функциональщину и SQL.

[identity profile] bydlorus.livejournal.com 2013-10-19 11:53 am (UTC)(link)
Я вообще давно не веб-программист, так, кое-что писал раньше, но было два подхода - или хранить временный полузаполненный объект в базе и юзать его id, или гонять туда-назад (по кнопкам next/prev) все данные объекта.

[identity profile] jakobz.livejournal.com 2013-10-19 12:59 pm (UTC)(link)
Вот и вот-то. И при любом раскладе обмазать это все тонной яваскрипта. При том что такое же любой юниор на десктопе сделает без включения мозга.

А потом еще QA придет и проверит что будет если кнопочки back понажимать, пооткрывать какой-нибудь второй шаг в нескольких окнах, поделать это все из сессий разных юзеров с одним объектом, а потом - еще совместить это все вместе.

[identity profile] bydlorus.livejournal.com 2013-10-19 02:27 pm (UTC)(link)
С каким одним объектом, временные объекты или данные форм все разные, кнопочки back и так тестируются. Ну и к тому же без включения мозга получится полюбому хуже. Не сохранено? Выведем msgbox. Повбивал бы.

[identity profile] jakobz.livejournal.com 2013-10-21 05:46 am (UTC)(link)
Ладно, давай я попроще свою позицию продемонстрирую:
- есть форма для создания или редактирования "продукта"
- на форме есть контрол для выбора категории продукта.
- обычная для оперденей практика - делать этот контрол как input с поиском имеющихся категорий, плюс ставить справа еще две кнопки - для создания новой категории (открывает модальное окно), и для расширенного поиска категории (тоже открывает новое окно)

Мне интересно как делать без модальных окон, в вебе, подобные сценарии. Всякие отклонения типа "выведем msgbox где не надо" - они мне не интересны.

[identity profile] bydlorus.livejournal.com 2013-10-21 06:33 am (UTC)(link)
Я в треде объяснил, например в одном из наших приложений (silverlight, но сейчас переписано на html/js) все эти окна - немодальные. Т.е. можно выбирать категорию, нажать там New, а потом переключиться назад в форму редактирования "продукта". Даже таскбар есть на все эти окна, хотя это опционально, если они видны, можно по ним просто щёлкнуть. Мне интересно, зачем этим формам быть модальными, чем это обосновано?

Если интересует "как" сделано, так обычным js, библиотек для создания окошек - вагон.

[identity profile] jakobz.livejournal.com 2013-10-21 08:37 am (UTC)(link)
Смотри чем оно обосновано. В вебе "немодальное" - это либо переход на другую страницу, либо открытие другого окошка. Мы хотим заполнить половину формы, дальше перейти на другую страницу чтобы добавить запись в справочник, и дальше вернуться назад к той же наполовину заполненной форме, и поставить в поле выбора из справочника ссылку на свежесозданную запись.

Я вижу тут какие проблемы:
- как стейт формы снять, куда его положить, и как восстановить назад. Такое нужно решать каким-то высокоуровневым UI-фреймворком. А такие штуки, как правило, требуют заботы и внимания.
- как показать юзеру, что его это все введенное не отломалось при переходе на другую страницу?
- что если юзер пойдет еще куда-то дальше там? Что если он коллеге ссылку скинет на какую-то страницу в процессе? Как это показывать на UI? Как управлять стейтами этих всех недозаполненных форм?

При этом всем через модальные окошки на десктопе такое делается просто, быстро и довольно понятно для юзера. Учти еще что разработка опердени - это не гламурный UI для твитера делать: сил много для вылизывания UI у тебя не будет, а вот "сделайте это вчера и не отломайте ничего по дороге" - это будет.

[identity profile] bydlorus.livejournal.com 2013-10-21 08:42 am (UTC)(link)
Есть окошки в вебе и на декстопе на js. Окошки внутри страницы, переходить на другую не обязательно. Модальными этим окошкам быть не обязательно как в вебе, так и на десктопе.

[identity profile] jakobz.livejournal.com 2013-10-21 08:48 am (UTC)(link)
Т.е. ты предлагаешь сделать свою систему немодальных окошек внутри окошка браузера, и там нарулить себе альт-таб, панель задач, табы какие-нибудь свои, ресайз и свернуть/развернуть на весь экран, всякое такое?

[identity profile] bydlorus.livejournal.com 2013-10-21 08:52 am (UTC)(link)
Для сложных UI - да. Но самому делать не обязательно, их кучи готовых. Альт-табы и таскбары также опциональны.

[identity profile] jakobz.livejournal.com 2013-10-21 08:58 am (UTC)(link)
ExtJS чтоли? Вообще да, можно делать single-page application, конечно, там со стейтом попроще будет. Но вот приделывать туда еще систему окон, чисто чтобы можно было что-то там немодально делать - это перебор как по мне.

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

Так что нет, спасибо, я сделаю лучше модальные попапы где оно нужно, но остальной весь UI у меня будет как на человеческом вебе - с прозрачными ссылками и прочим.

[identity profile] metaclass.livejournal.com 2013-10-21 08:54 am (UTC)(link)
Окошки вообще не нужны. Нужно одно окно (десктоп или веб - не важно) и фреймы-контролы в нем. Ну табы еще, впрочем, для веба можно и в браузере их открыть, а для десктопа - отдельные окна или вообще отдельные приложения.

[identity profile] jakobz.livejournal.com 2013-10-21 09:15 am (UTC)(link)
С точки зрения UX табы конечно лучше. Но с программной стороны суть практически не меняется от этого.

[identity profile] metaclass.livejournal.com 2013-10-21 08:52 am (UTC)(link)
Я лично собираюсь вот такое делать на самодельном фреймворке.
Все эти хипсторасы с их готовыми жабаскриптовыми либами пока пригодны только для говнотвиттеров и кнопки "Поделится фотонькой в социальной сети".
Предполагаемый вариант: состояние хранится на сервере, ссылка указывает на "текущий контекст работы, жабаскрипт его рендерит. Т.е. если у юзера браузер отвалится и он заново откроет - он продолжит работать с того места, где прервался. А модальные-немодальные окна - это сугубо машина состояний-workflow и тому подобный мрак.
С ссылками коллегам - сложнее, там права доступа придется проверять.

[identity profile] jakobz.livejournal.com 2013-10-21 09:03 am (UTC)(link)
Вот я тоже насчет чего-то такого размышляю, да. Там еще это все завязывается в клубок с валидацией, UI-компонентами, навигацией и еще всяким. Короче там надо нормальный такой накал декларативности вкручивать.

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

[identity profile] berezovsky.livejournal.com 2013-10-21 01:39 pm (UTC)(link)
Точно. Это будет называться "принцип одного окна".