Задать вопрос

CRUD-велосипед — стоит ли?

Привет, %юзернейм%.

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



Дело в общем-то не бог весть какое сложное — 50<N<100 концентраторов, с каждого из них в центр аналитики по двум каналам капает SNMP-статистика, по факту анализа статистики осуществляется полуавтоматический переход на другую конфигурацию маршрутизации. Из ручных штук здесь требуется лишь аппрув дежурного администратора, чтоб в случае появления чего-нибудь ужасного можно было быстро всё вернуть на место.



Соотвественно, для толкового управления этим делом нужно две формы представления информации — сводная статистика (замечательно показывается zabbix-ом), и просмотр некоего набора конкретных параметров с возможностью их редактирования (в том числе — группового).



На деле это реализуется через связку codeigniter+bootstrap, табличкой со списком концентраторов, формочками c параметрами и кнопкой «внести изменения». И написание кода, который всем этим управляет, вгоняет меня в откровенную тоску, ведь для этого нужно:

  • Сверстать форму управления
  • Подгрузить её аджаксом
  • Проверить, не возникло ли ошибок при подгрузке формы
  • Запросить данные из интерфейса управления
  • Дождаться этих данных и проверить их на валидность
  • Конвертировать их в JSON и раскидать по форме
  • Дождаться, пока юзер не нажмет кнопку
  • валидировать данные на клиенте
  • валидировать данные в веб-сервисе
  • дождаться обработки интерфейсом управления
  • вывести юзеру ошибку, если таковая произошла
  • Не забыть при этом про то, что бывают разные там XSS
  • И надо бы его аутентифицировать как-нибудь




И это если я сейчас ещё ничего не забыл.



Самое обидное, что почти весь этот код каждый раз для каждой формы приходится писать заново. А ведь есть ещё функции отключения\удаления\блокировки концентраторов (который на уровне Management Interface вообще реализуется одной строчкой!), а гуй к нему нужно писать полноценный, с окошками «а вы действительно хотите?» и т.д.



В итоге от безысходности я придумал следующий велосипед.



Текущее состояние однотипных объектов у нас описывается одинаковыми наборами полей. Иными словами, это вполне типичная таблица, как в любой СУБД, разве что без индексов и прочего. Изменения состояния имеют привязку по коду к определенным событиям — получаем типичную связь один-ко-многим. Т.е. итоговая выдача MI начинает напоминать результат обычного селекта с парой лефт джойнов к каким-то таблицам.



А теперь, собственно, сам велосипед.



Для каждого поля в таблице привязываем юзерфрендли-имя и тип юзер-редактора (типы использовать нельзя — допустим, для поля с датой это календарь, а вот поле с интом может быть как просто интом, так и ссылкой на некий ID, где придётся мутить какой-то custom-select).



Дальше некое подобие ActiveRecord — класс, описывающий построение запроса на селект. Соответственно, мы сразу видим, какие таблицы и в каких ролях у нас участвуют (главная-подчиненная), и можем на основе этого автоматически создавать хтмл-форму.



На очереди у нас валидация. Правила валидации могут устанавливаться как для класса целиком (в момент создания класса-запроса), так и для отдельных полей, участвующих в запросе (в момент описания класса-таблицы). Вдобавок, обязательна валидация по типу поля.



Собственно, после этого разработка очередной формы сведется к трем вещам:

1) описание таблиц и отношений между ними

2) ввод метаданных (имена полей, правила валидации, итд)

3) запуск некоей функции, инициирующей жизненный цикл окна редактирования\создания, и имеющей единственный параметр — имя класса, описывающего конкретный запрос



На самом деле всё это чудовищно напоминает обычный Microsoft Access и его мастер создания форм. Есть лишь одно отличие — это должно работать в браузере.



Искренне хочется верить, что всё вышеописанное уже кто-то реализовал. Существуют ли средства автоматизации управления html-формами c подобным функционалом?
  • Вопрос задан
  • 7442 просмотра
Подписаться 6 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
jen777
@jen777
Быстрый поиск с помощью Гугл, дал несколько вариантов. Операция автогенерирования кода на основе базы данных называеться DB Scaffolding. есть пару сервисов и систем, которые создают или упрощают создания подобных форм:
www.phpscaffold.com/ — Создаёт PHP скрипты на основе дампа базы данных.
ajaxcrud.com/ — Система упрощает создание CRUD форм с помощью описания полей формы в коде.
www.grocerycrud.com/ — очень простой и удобный CRUD билдер. Всего в пару строк у вас есть круд для любой таблицы в базе данных.

Дальнейший поиск по подобным сервисам для разных языков программирования и баз данных приведёт вас к необходимому результату.
Ответ написан
Комментировать
@artemlight Автор вопроса
Последние полгода работаю с .net Entity Framework - насколько же удобнее и лаконичнее был мой велосипед.
Эх.
Ответ написан
Комментировать
Pinsky
@Pinsky
Кофеиноникотиновая смесь в backend-код
У Yii2-фреймворка для PHP есть генератор крудов. С ним подобные штуки пилятся за день)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы