Как показал опыт эксплуатации alterator, главная проблема с которой сталкивается пользователь этой системы – создание динамического интерфейса. Бакенд пишется мгновенно, а как только требуется изобразить что-то на экране – возникает полное непонимание того как:
Проект FBI (сокращение от Form Based Interface) призван решить эту проблему. Типичный модуль конфигуратора делится на следующие составляющие:
Eдиный стиль и оформление рисует дизайнер, очень редко требуется сделать незначительные поправки для конкретного модуля. В репозитории пакетов, можно найти несколько готовых дизайнов под разные дистрибутивы.
Большинство диалогов имеют одну и ту же логику заполнения шаблона, часть особенных случаев решается заданием дополнительных параметров. Вместе с FBI поставляется набор самых распространённых workflow, таких как: form (форма) и card-index (картотека).
Эффекты также повторяются от формы к форме. На лицо сильное повторное использование компонент. Большую часть работы (за исключением написания бакенда) для автора модуля уже сделали другие разработчики. Вместе с FBI поставляется набор самых распространённых визуальных эффектов. Например возможно добавить возможности AJAX при работе с card-index и тем самым сильно приблизить поведение web-приложения к традиционному GUI.
Сделаем простейший модуль, который будет считывать и записывать два параметра в некоторый конфигурационный файл.
Все модули alterator имеют единую внутреннюю структуру. В принципе никто не запрещает вольностей, но при использовании стандартной раскладки, можно воспользоваться удобными функциями отладки модуля и готовыми правилами для make.
В нашем примере используются следующие каталоги:
Пользуясь любимым языком программирования системных администраторов shell, пишем бакенд, который занимается важным делом, управлением конфигурационным файлом от приложения foo.
Находясь в рабочем каталоге убеждаемся что бакенд работает:
Теперь давайте нарисуем шаблон формы.
Внешне она выглядит так:
А html-код продемонстрирован ниже:
Как видите, самая обычная форма, но ... с одной маленькой хитростью. Имена полей совпадают с именами параметров объекта в представлении бакенда.
В данном примере сделаны некоторые попытки украсить внешний вид, но, в принципе, можете оставить эту работу дизайнеру.
Шаг 3. Фронтенд.
Данный пример замечательно подходит под модель «форма», то есть пользователь проводит изменения, нажимает на кпопку submit и в системе модифицируются сетевые настройки.
Связывание backend и frontend происходит с помощью вспомогательного бакенда, который отвечает на запрос template сдедующее:
Этим сказано, что бакенд /net-general желает иметь интерфес с логикой работы типа “form” (или говоря правильными терминами frontend по имени form) и предлагает использовать html-файл, размещённый по указанному адресу в качестве «затравки» ( не исключаю что возможны frontend с элементами искуственного интеллекта, которым можно передать текстовый файл с перечилением идей).
Замечание: вспомогательный бакенд существует отдельно по одной единственной причине, чтобы отделить логику представления от логики работы. Если вам лень городить дополнительные файлы, то можно сделать символическую ссылку template-<backend> на <backend> и научить свой бакенд отвечать на вопрос template.
Шаг 4. Браузер.
Ну вот собственно и всё. Запускаем fbi, запускаем браузер, идём по адресу http://hostname/fbi-bin/alterator-template.scm/net-general и наблюдаем результат:
Вот и собственно и всё ... форма заполнилась данными, подключились constraints (требуемое поле выделенно звёздочкой, ненужные поля погашены). Можно переходить к написанию следующих конфигураторов.