Базовая информационная система. Что, почему и для чего?

Предыстория

Информация. Когда её становится много, и возникает потребность в упорядочивании, можно пойти разными путями. От таблиц Excel до облачных систем документооборота. Между ними есть множество вариантов сделать свою информационную систему.

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

Мы пробовали разные пути. В итоге идём по пути "конструктора информационных систем". Мы называем его "Базовая Информационная Система" (БИС). Слово "базовая" здесь означает основу. То, на чём строится реальная прикладная информационная система. В некоторых смыслах БИС это что-то вроде платформы или фреймворка, однако точного аналога для названия не нашлось, потому - БИС.

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

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

Область применения

  • В качестве СУБД наша БИС использует SQL Server или Postgres.
  • Нам нравится .Net и С#, потому почти всё на нём.
  • Мы работаем на Windows, .Net Framework 4.8.
  • Мы думаем о .Net Core и Линуксах, но пока всё на Windows.
  • БИС можно использовать и для самого себя в качестве удобной надстройки над СУБД, но основное её назначение - это коллективная работа множества пользователей для решения разного рода информационных задач.
  • БИС ориентирована на интенсивный обмен данными в локальных сетях.
  • Современного мобильного интернета вполне хватает для удалённой работы клиентских приложений БИС.
  • Клиентские приложения БИС предназначены в первую очередь для работы с большим количеством разных сложных объектов с большим количеством атрибутов.
  • О красивых иконках и высокохудожественных экранах с парой кнопок мы тоже помним.
  • При желании сервер БИС вполне может служить полноценным веб-сервером, однако это не основное его назначение.

Основные компоненты БИС

  • Сервер приложений. Работает в виде службы Windows, подключён к СУБД, слушает TCP порт для связи с клиентскими приложениями, слушает http/https запросы через Windows HTTP драйвер.
  • Файловый сервер (один или несколько). Работает в виде службы Windows. Подключён по TCP к серверу приложений, слушает TCP порт для связи с клиентскими приложениями, хранит переданные в систему тела файлов.
  • Клиентское приложение. Десктопное приложение Windows, подключается к серверу приложений и при необходимости к файловым серверам по TCP.
  • Клиентская вспомогательная служба. Работает в виде службы Windows на клиентских рабочих местах, используется для локального кэширования, автообновления клиентских приложений, уведомлений пользователю и прочего.
  • Модуль интеграции с проводником Windows. Используется для встраивания в контекстное меню в проводнике собственных прикладных команд.
  • Мобильное приложение (пока только Android) для подключения к веб-шлюзу БИС и получения Push сообщений от скриптов прикладной логики информационной системы.
  • В сфере машиностроения мы также используем многочисленные модули интеграции с КАДами и другими программами (Word, Excel, Компас, Solidworks, Inventor, Autocad, Altium Designer и др.). Они позволяют использовать клиентские компоненты БИС внутри сторонних программ.

Модель данных и прикладная логика

  • Модель данных прикладной информационной системы формируется прямо в клиентском приложении путём создания шаблонов объектов и определения их атрибутов, кнопок, команд меню, вкладок, правил вложения и прочего.
  • Настройка модели данных доступна пользователям конфигураторам системы через основное клиентское приложение. Настройка может производиться на ходу без перезапуска.
  • Прикладная логика (скрипты) пишется на C# прямо в основном клиентском приложении, компилируется на ходу и встраивается в работающую информационную систему.
  • В качестве компилятора скриптов и средства синтаксической подсветки и автоподсказки при написании скриптов мы используем Roslyn. Можно редактировать скрипты и в Visual Studio.
  • БИС предоставляет C# API как для программного формирования модели данных и прикладной логики, так и для работы с объектами по сформированной модели данных.
  • БИС по сути является средством разработки информационных систем, структурированного хранения прикладного кода, его автоматической сборки, группирования в отчуждаемые и переносимые на другие сервера логические модули прикладной логики. Мы называем такие модули конфигурациями.
    Конфигурация - логически обособленный именованный набор объектов, определяющих модель данных и скриптов к ним.

Прикладная логика в виде скриптов означает в том числе и открытость скриптового кода. БИС хранит его в СУБД в виде исходников C# и автоматически компилирует по необходимости.

Основные подсистемы и сервисы БИС

С БИС работают разные категории пользователей:

  • Конфигураторы - те, кто занимается настройкой модели данных и прикладной логики информационной системы.
  • Администраторы - те, кто заведует учётными записями и правами доступа.
  • Простые пользователи - те, кто использует прикладную информационную систему по прямому назначению.

Для простых пользователей БИС предоставляет:

  • Централизованное хранение информации в СУБД и тел файлов в файловых хранилищах.
  • Универсальное отображение доступной пользователю информации в клиентском приложении в соответствии с сформированной прикладной моделью данных. Трёхпанельная схема: дерево-состав-свойства. Навигация по объектам с историей переходов. Основное окно с возможностью открыть набор вкладок в нескольких группах вкладок.
  • Авторизация в системе через логин-пароль или по учётной записи Windows.
  • Подсистема поиска с конструктором поисковых запросов с использованием прикладной модели данных. Поддерживается полнотекстовый поиск.
  • Быстрый минипоиск по именам объектов.
  • Ролевая система прав доступа к информации дополнительно настраиваемая скриптами.
  • Раздел Избранное для быстрых ссылок на то, что хочется держать под рукой.
  • Раздел Задачи и рабочие процессы - для доступа к задачам, порученным пользователю через подсистему бизнес-процессов (WorkFlow).
  • Раздел Почта для доступа к подсистемы внутренних почтовых сообщений.
  • Раздел Сотрудники для доступа к видимым по правам доступа коллегам, подчинённым и начальникам.
  • Встроенный чат для быстрого общения с другими пользователями информационной системы.
  • Модуль WorkFlow (управление бизнес-процессами).
  • Возможность взаимодействовать с системой через WEB, включая мобильное приложение с поддержкой Push сообщений от системы.
  • Множество других возможностей, предоставляемых сформированной в БИС прикладной моделью данных и скриптами, реализующими нужное поведение системы для конечного пользователя.

Для администраторов:

  • Формирование и управление учётными записями и ролевой системой прав доступа с наследованием по схеме: объект-пользователь-роль.

Для конфигураторов:

  • Модуль конфигурирования в клиентском приложении. Настройка прикладной модели данных и C# скриптов для описания поведения информационной системы.
  • Возможность делать свои кнопки, команды меню, кнопки верхней панели инструментов клиентского приложения.
  • Возможность делать сложные кастомизированные раскладки элементов управления для карточки объекта.
  • Редактор C# скриптов с синтаксической подсветкой и автоподсказкой (используем Roslyn).
  • Интеграция с Visual Studio для редактирования и отладки скриптов.
  • Импорт-экспорт конфигураций для переноса готовых модулей на другие сервера.
  • Встроенный редактор диаграмм бизнес-процессов.
  • Встроенное окно для скриптовой подготовки и формирования печатных документов.
  • Возможность подключать к конфигурациям сторонние dll и делать всё, что доступно в мире .Net через C#
  • C# API для формирования поисковых запросов с учётом прикладной модели данных.
  • WEB доступ к серверу и возможность на C# формировать ответ на http(s) запрос.
  • Скриптовая интеграция с проводником Windows: контекстные меню, операции перетаскивания, иконка в области уведомлений.

Примечание: часть подсистем предполагает использование сопутствующих конфигураций (WorkFlow, печатные документы, веб доступ, чат). Это означает, что для этих подсистем большая часть логики реализована в виде скриптового кода и прикладных объектов внутри БИС.

Что можно сделать из БИС?

С точки зрения программиста БИС - это своего рода среда разработки и исполнения сложных многопользовательских приложений на C#, объединённая с визуальными средствами конструирования модели данных для СУБД и готовым клиентским приложением с поиском, правами доступа и прочими сервисами.

БИС предоставляет простой C# API для работы с атрибутируемыми объектами, создание, сохранение, изменение, поиск, вычисляемые атрибуты, кнопки, управление отображением объектов и ещё много чего разного, что нам понадобилось за долгое время применения БИС в информационных системах уровня предприятия в машиностроительной отрасли.

Сделать из БИС можно много чего, если не выходить далеко за "область применения". Помимо документооборота для конструкторов и технологов мы или наши партнёры делали:

  • модуль планирования (проекты, задачи, диаграмма Ганта),
  • подсистема управления требованиями,
  • подсистема управления качеством,
  • система управления содержимым веб-сайта,
  • система управления бизнес-процессами подготовки производства,
  • почтовый клиент (читаем письма, храним в СУБД),
  • модуль документации,
  • модуль подготовки печатных документов (бланков по ГОСТ со многими из тонкостей оформления этих бланков).
  • система многопользовательской подготовки данных для создания программ и сайтов в образовательной сфере,
  • модуль для управления комментариями к c# коду для автоматизированного перевода и отслеживания изменений.

Как только появляется хоть какой-нибудь объём информации, скорее всего много полезного можно сделать вокруг него с помощью БИС. В том числе и учиться программировать на C#. Гораздо эффективнее это делать на "живых" объектах, которые можно "пощупать" руками, чем сортировать непонятные абстрактные массивы.

Что находится вне области применения БИС?

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

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

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

Однако даже в этих случаях БИС может быть полезна например для того, чтобы быстро сделать прототип системы и посмотреть на него вживую. Кроме того, вокруг алгоритмически сложных случаев обычно всегда есть множество информационных задач, решение которых с помощью БИС оказывается очень эффективным.

Программирование прикладной логики

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

Конечно, чем более подкован программист, тем лучше у него получаются даже простые вещи. Однако, толковых сотрудников и квалифицированных программистов, часто не хватает. В этом случае спасает простота API при работе с информацией внутри БИС и наша забота о том, чтобы система по-возможности адекватно работала вне зависимости от того, что конкретно сделано в прикладной логике. Чудес тут, конечно, не бывает и переполнив стек внутри скрипта, всегда можно "уронить" систему. Тем не менее на практике в большинстве случаев среди сотрудников на стороне заказчика часто находятся люди, способные освоить C# и скриптовой API БИС и начать самостоятельно поддерживать и развивать свою информационную систему.

Скриптовой код внутри БИС в большинстве случаев привязан к объектам своей модели данных и в рамках БИС он автоматически структурируется так, чтобы минимизировать степень влияния на другие модули. Это существенно упрощает разработку. Занимаясь скриптами своего прикладного модуля, обычно можно не беспокоиться, что что-то "сломается" в другом.

БИС изначально задумана в виде слоёного пирога, в котором ядро слой за слоем обрастает прикладной логикой. При этом разрабатывать отдельные модули для прикладной информационной системы могут разные разработчики, в том числе и сторонние, привлечённые заказчиком, и непосредственно сотрудники на стороне заказчика.


Дополнительно:

Создание прикладной информационной системы с использованием БИС
28.06.2020

Разделы: