mirror of
https://github.com/StepanovPlaton/SSAUGenerator.git
synced 2026-10-31 10:18:29 +04:00
first commit
This commit is contained in:
126
content/03-design.md
Normal file
126
content/03-design.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ
|
||||
|
||||
В разделе описаны архитектура, модель данных и пользовательские сценарии разрабатываемой
|
||||
информационной системы.
|
||||
|
||||
## Архитектура системы
|
||||
|
||||
Система построена по трёхуровневой архитектуре. Взаимодействие компонентов показано на
|
||||
рисунке @fig:data-flow.
|
||||
|
||||
::: figure "Схема информационных потоков" id=data-flow file=images/data-flow.png
|
||||
а) направление передачи данных;
|
||||
б) компоненты системы.
|
||||
:::
|
||||
|
||||
Состав программных модулей приведён в таблице @tbl:modules.
|
||||
|
||||
::: table "Состав программных модулей" id=modules
|
||||
| Модуль | Назначение | Технология |
|
||||
|---|---|---|
|
||||
| Веб-интерфейс | Отображение рабочих экранов оператора | React |
|
||||
| API-шлюз | Обработка HTTP-запросов клиентов | Node.js |
|
||||
| Модуль заявок | Жизненный цикл обращения | Node.js |
|
||||
| Модуль уведомлений | Рассылка оповещений исполнителям | Node.js |
|
||||
| Модуль отчётности | Формирование отчётов за период | Node.js |
|
||||
| Служба аутентификации | Проверка учётных данных | JWT |
|
||||
| Хранилище данных | Хранение заявок и справочников | PostgreSQL |
|
||||
| Кэш | Ускорение чтения справочников | Redis |
|
||||
| Очередь сообщений | Асинхронная обработка событий | RabbitMQ |
|
||||
| Сборщик журналов | Централизованное логирование | ELK |
|
||||
| Планировщик | Периодические задачи и отчёты | Cron |
|
||||
| Модуль интеграции | Обмен данными с внешними системами | REST |
|
||||
:::
|
||||
|
||||
## Модель данных
|
||||
|
||||
Основные сущности предметной области и их атрибуты приведены в таблице @tbl:entities.
|
||||
|
||||
::: table "Основные сущности и атрибуты" id=entities
|
||||
| Сущность | Атрибут | Тип | Обяз. | Описание |
|
||||
|---|---|---|---|---|
|
||||
| Заявка | id | Целое | Да | Уникальный идентификатор |
|
||||
| Заявка | subject | Строка | Да | Тема обращения |
|
||||
| Заявка | description | Текст | Да | Описание проблемы |
|
||||
| Заявка | category_id | Целое | Да | Ссылка на категорию |
|
||||
| Заявка | priority_id | Целое | Да | Ссылка на приоритет |
|
||||
| Заявка | assignee_id | Целое | Нет | Ссылка на исполнителя |
|
||||
| Заявка | created_at | Дата/время | Да | Момент регистрации |
|
||||
| Заявка | closed_at | Дата/время | Нет | Момент закрытия |
|
||||
| Категория | id | Целое | Да | Уникальный идентификатор |
|
||||
| Категория | name | Строка | Да | Наименование категории |
|
||||
| Приоритет | id | Целое | Да | Уникальный идентификатор |
|
||||
| Приоритет | name | Строка | Да | Наименование приоритета |
|
||||
| Приоритет | reaction_min | Целое | Да | Норматив реакции, мин |
|
||||
| Пользователь | id | Целое | Да | Уникальный идентификатор |
|
||||
| Пользователь | full_name | Строка | Да | Фамилия, имя, отчество |
|
||||
:::
|
||||
|
||||
Связи между сущностями описаны в таблице @tbl:relations.
|
||||
|
||||
::: table "Связи между сущностями" id=relations
|
||||
| Связь | Тип | Описание |
|
||||
|---|---|---|
|
||||
| Заявка — Категория | Многие к одному | Заявка относится к одной категории |
|
||||
| Заявка — Приоритет | Многие к одному | Заявка имеет один приоритет |
|
||||
| Заявка — Пользователь | Многие к одному | Заявка назначена одному исполнителю |
|
||||
| Заявка — Комментарий | Один ко многим | Заявка содержит комментарии |
|
||||
| Пользователь — Роль | Многие ко многим | Пользователь может иметь роли |
|
||||
| Категория — Подкатегория | Один ко многим | Категория содержит подкатегории |
|
||||
:::
|
||||
|
||||
## Пользовательские сценарии
|
||||
|
||||
Интерфейс списка заявок приведён на рисунке @fig:interface.
|
||||
|
||||
::: figure "Интерфейс списка заявок" id=interface file=images/interface.png
|
||||
а) область навигации;
|
||||
б) табличное представление данных.
|
||||
:::
|
||||
|
||||
Зависимость трудозатрат от выбранной стратегии обработки показана на рисунке @fig:chart.
|
||||
|
||||
::: figure "Зависимость трудозатрат от стратегии обработки" id=chart file=images/chart.png
|
||||
Оценка получена по результатам пилотной эксплуатации.
|
||||
:::
|
||||
|
||||
Экономия времени за месяц вычисляется по формуле @eq:gain.
|
||||
|
||||
::: formula id=gain
|
||||
G = (T_base - T_new)*N
|
||||
:::
|
||||
|
||||
::: where
|
||||
G — экономия времени за месяц, мин;
|
||||
N — число обращений в месяц.
|
||||
:::
|
||||
|
||||
К системе предъявляются следующие требования:
|
||||
|
||||
- функциональные:
|
||||
1. регистрация и классификация заявок;
|
||||
2. назначение исполнителя и контроль сроков;
|
||||
3. формирование отчётов за период.
|
||||
- нефункциональные:
|
||||
1. время отклика не более двух секунд;
|
||||
2. одновременная работа не менее ста пользователей.
|
||||
|
||||
## Особенности реализации
|
||||
|
||||
При проектировании учтены ограничения, перечисленные в таблице @tbl:constraints.
|
||||
|
||||
::: table "Ограничения и меры" id=constraints
|
||||
| Ограничение | Влияние | Мера |
|
||||
|---|---|---|
|
||||
| Ограниченный бюджет | Сужение выбора технологий | Применение открытых библиотек |
|
||||
| Сжатые сроки | Риск неполной реализации | Итеративная разработка |
|
||||
| Нагрузка до 100 пользователей | Требования к производительности | Кэширование и индексы |
|
||||
| Устаревшее оборудование | Ограничение ресурсов | Облегчённый веб-интерфейс |
|
||||
| Разрозненные данные | Сложность интеграции | Единая модель данных |
|
||||
| Требования безопасности | Дополнительные проверки | Аутентификация и журналирование |
|
||||
:::
|
||||
|
||||
::: notes
|
||||
Оценка выполнена для среднего месяца пилотной эксплуатации.
|
||||
Отклонение фактических значений не превышает десяти процентов.
|
||||
:::
|
||||
Reference in New Issue
Block a user