⟨/⟩ 50_Domain/BC_Icd.cs

71 строк · в начало

using Ban.Sdaid.Notation.Documents;

namespace Ban.Sdaid.Icd.Domain
{
    /// <summary>
    /// Единственный ограниченный контекст Сервиса — оцифровка информационных карт. Держит общую
    /// схему данных: все доменные сущности и связи между ними. Описание каждой сущности —
    /// в её собственном документе.
    /// </summary>
    public class BC_Icd : IBoundedContextModuleDocument
    {
        public string Name => "Оцифровка информационных карт";

        public string Description =>
            @"Ограниченный контекст Сервиса: общая схема данных и её границы. Внутри контекста язык единый — термин значит одно и то же во всех частях модели.";

        public string Version => "0.1";
        public string Status => "draft";
        public string[] Comments => new string[0];

        public static string S1_Scope = """
            ## Границы контекста

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

            Настоящая граница контекста проходит **снаружи**, по стыку с АБИС. Там другая модель,
            другой владелец и другой язык: то, что в АБИС называется документом, — библиографическая
            запись со своей структурой. Обмен идёт через контракт — файл выгрузки на выходе, —
            а не прямым обращением к чужой модели.

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

        public static string S2_Grouping = """
            ## Группировка сущностей

            Сущности разложены по папкам по фазам жизненного цикла данных — это **навигационная
            группировка внутри одного контекста**, а не отдельные контексты: границ языка между
            папками нет, ссылки между сущностями прямые.

            | Папка | Что содержит | Кто порождает данные |
            |---|---|---|
            | `Capture/` | пакет ввода, кадры изображений, отклонения вида, значения полей | пользователь при вводе и обработка |
            | `Processing/` | области-источники на кадре | автоматическая обработка |
            | `Cards/` | информационная карта, документы карты и их атрибуты; виды документов с составом атрибутов, типы значений и формы | создание карты по итогам проверки; справочная часть ведётся администратором |
            | `Export/` | выгрузка: сформированный файл для АБИС и его состав | создание карты; реже — администратор повторно |
            | `Access/` | пользователи, группы, функции, ключи claim, токены сессии | администратор (доступ) и вход/выход |

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

        public static string S3_Schema = """
            ## Схема данных

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

            Перечисления (источники кадра, состояния пакета, виды типов значений, происхождение
            значения, свойства ядра карты) на схему не выносятся: они описаны в документах тех сущностей, где используются.
            """;
    }
}