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] 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)
Точно. Это будет называться "принцип одного окна".