Единая метамодель

Концепция: сущность и показатель

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

Сущность

Справочник целиком: код, физическая таблица для записей, признак иерархичности.

Показатель

Одно поле справочника — тип значения и физическая колонка; если поле ссылается на другой справочник, оно несёт код связанной сущности.

Связь сущности и показателя

Обязательность поля, множественность связи, ограничения длины и формата — отдельная запись, а не ветка кода экрана.

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

Масштаб метамодели

Это не техническая абстракция на бумаге, а рабочий объём данных, накопленный платформой.

  • 607сущностей — справочников и объектов платформы
  • 1 792показателя — отдельных полей
  • 4 794связи сущности и показателя
  • 19справочников редактируются через интерфейс НСИ

Метаданные не переносятся вручную: они загружаются миграциями из CSV-файлов и обновляются тем же способом, каким поставляется остальной код платформы, — 1 065 загрузок метаданных из 1 071 файла.

Как строится экран по метаданным

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

Если для экрана заранее описан состав и порядок полей — используется он. Так устроены, например, справочники процессов и ИТ-систем.

Служебные поля — дата создания записи, признак изменения — на экране справочника скрываются автоматически: сотрудник не видит технических следов работы системы.

Иерархия и связи справочников

Часть справочников устроена не плоским списком, а деревом: у записи есть родитель, и дерево строится по одному и тому же признаку — без отдельного кода под каждый иерархический справочник.

Корневая запись справочника дерево строится по показателю «родительский элемент»
  • Запись 2-го уровня
  • Запись 2-го уровня
    • Запись 3-го уровня

Дерево — не отдельный справочник со своим кодом: тот же механизм показателей, что и у плоского списка, плюс один признак родителя. Раскрыть, свернуть и найти запись по названию можно и с клавиатуры.

Показатель умеет не только хранить значение, но и ссылаться на запись другого справочника, причём не обязательно «один к одному»: связь может быть множественной, со своей таблицей соответствий. В метаданных платформы заведено 14 таких множественных связей.

Локализация представлений

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

Если для сущности или показателя собственное представление не заведено, платформа не покажет пустое поле: название соберётся прямо из показателей сущности. Читаемый экран есть всегда, даже у только что добавленного справочника.

Интерфейс модуля ведётся на двух языках — русском и английском; переименование справочника или поля не требует правки исходного кода экрана.

Новый справочник без правки кода

Здесь проходит главное отличие модуля от обычного администратора справочников: новый список или новое поле не требуют релиза продукта.

  1. Таблица для данных — создаётся миграцией
  2. Метаданные справочника — код, имя, состав полей грузятся из CSV, а не пишутся в модели кода
  3. Русское и английское название — добавляется ключом локализации
  4. Справочник становится виден в интерфейсе — код добавляется в список редактируемых объектов и в навигатор рабочего места
  5. Права — менеджеру и оператору НСИ выдаётся доступ на новый объект тем же механизмом, что и на остальные справочники

Так же заводится и новое поле у существующего справочника. Пример — из истории самого модуля: показатели «Может читать» и «Может вносить изменения» появились в справочнике операторов справочников именно этим способом, добавлением колонки и записи в метаданных, без единой строки нового кода экрана.

Ограничения и открытые вопросы

Гибкость модели — не то же самое, что самообслуживание на уровне самой метамодели.

Что входит

Заведение нового справочника или поля — работа с миграцией и CSV, отдельная от разработки экранов: её делает ИТ-команда внедрения, без доработки прикладного кода модуля.

Как устроена история правки

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

Показать метамодель на вашем стенде

Заведём справочник вашей организации данными — без строки нового кода — прямо на демонстрации, на реальном составе полей.