Единая метамодель
Концепция: сущность и показатель
В большинстве систем один справочник — это отдельная программная сущность: своя таблица в коде, свой экран, свой релиз при любом изменении состава полей. В модуле НСИ справочник описан данными, а не кодом: сущностью, набором показателей и их связью.
Сущность
Справочник целиком: код, физическая таблица для записей, признак иерархичности.
Показатель
Одно поле справочника — тип значения и физическая колонка; если поле ссылается на другой справочник, оно несёт код связанной сущности.
Связь сущности и показателя
Обязательность поля, множественность связи, ограничения длины и формата — отдельная запись, а не ветка кода экрана.
Экран справочника не рисуется заново под каждый новый список: он строится по этим трём таблицам и их представлениям — какое имя показать, в каком порядке расставить колонки, что подписать по-русски и по-английски.
Масштаб метамодели
Это не техническая абстракция на бумаге, а рабочий объём данных, накопленный платформой.
- 607сущностей — справочников и объектов платформы
- 1 792показателя — отдельных полей
- 4 794связи сущности и показателя
- 19справочников редактируются через интерфейс НСИ
Метаданные не переносятся вручную: они загружаются миграциями из CSV-файлов и обновляются тем же способом, каким поставляется остальной код платформы, — 1 065 загрузок метаданных из 1 071 файла.
Как строится экран по метаданным
Экран не остаётся пустым, даже если для справочника ничего специально не настраивали, — платформа проходит по цепочке источников представления, пока не найдёт, из чего собрать таблицу и форму.
Если для экрана заранее описан состав и порядок полей — используется он. Так устроены, например, справочники процессов и ИТ-систем.
Если готового представления именно для этого экрана нет — берётся общее представление показателя, заданное на уровне платформы.
Если и этого нет — экран собирается из представления сущности: колонки идут в том порядке, что задан для справочника при его создании.
Если представления не задано вовсе — экран собирается прямо из списка показателей сущности. Пустого справочника не бывает только потому, что кто-то не настроил его отображение.
Служебные поля — дата создания записи, признак изменения — на экране справочника скрываются автоматически: сотрудник не видит технических следов работы системы.
Иерархия и связи справочников
Часть справочников устроена не плоским списком, а деревом: у записи есть родитель, и дерево строится по одному и тому же признаку — без отдельного кода под каждый иерархический справочник.
Корневая запись справочника дерево строится по показателю «родительский элемент»
- Запись 2-го уровня
- Запись 2-го уровня
- Запись 3-го уровня
Дерево — не отдельный справочник со своим кодом: тот же механизм показателей, что и у плоского списка, плюс один признак родителя. Раскрыть, свернуть и найти запись по названию можно и с клавиатуры.
Показатель умеет не только хранить значение, но и ссылаться на запись другого справочника, причём не обязательно «один к одному»: связь может быть множественной, со своей таблицей соответствий. В метаданных платформы заведено 14 таких множественных связей.
Локализация представлений
Имя справочника и подпись поля на экране не зашиты в код — это отдельный слой представления поверх данных, и его можно переименовать без участия разработчика.
Если для сущности или показателя собственное представление не заведено, платформа не покажет пустое поле: название соберётся прямо из показателей сущности. Читаемый экран есть всегда, даже у только что добавленного справочника.
Интерфейс модуля ведётся на двух языках — русском и английском; переименование справочника или поля не требует правки исходного кода экрана.
Новый справочник без правки кода
Здесь проходит главное отличие модуля от обычного администратора справочников: новый список или новое поле не требуют релиза продукта.
- Таблица для данных — создаётся миграцией
- Метаданные справочника — код, имя, состав полей грузятся из CSV, а не пишутся в модели кода
- Русское и английское название — добавляется ключом локализации
- Справочник становится виден в интерфейсе — код добавляется в список редактируемых объектов и в навигатор рабочего места
- Права — менеджеру и оператору НСИ выдаётся доступ на новый объект тем же механизмом, что и на остальные справочники
Так же заводится и новое поле у существующего справочника. Пример — из истории самого модуля: показатели «Может читать» и «Может вносить изменения» появились в справочнике операторов справочников именно этим способом, добавлением колонки и записи в метаданных, без единой строки нового кода экрана.
Ограничения и открытые вопросы
Гибкость модели — не то же самое, что самообслуживание на уровне самой метамодели.
Что входит
Заведение нового справочника или поля — работа с миграцией и CSV, отдельная от разработки экранов: её делает ИТ-команда внедрения, без доработки прикладного кода модуля.
Как устроена история правки
Возврат к прежнему значению — это пополевой журнал изменений и новый цикл согласования, а не автоматическое восстановление снимка данных. Каждое прежнее значение видно в журнале и может быть внесено повторно.
Показать метамодель на вашем стенде
Заведём справочник вашей организации данными — без строки нового кода — прямо на демонстрации, на реальном составе полей.