Инструменты пользователя

Инструменты сайта


sharixopen:knowledge:architecture:model_ownership

Владение моделями: где изменять данные ShariX Open

Назначение: Архитектура. Продукт: ShariX Open · Общий компонент.

Для кого: Разработчик · Интегратор · Рецензент и приёмщик · Нейросеть.

Темы: Архитектура → Владение моделями · Архитектура → Границы.

Владелец модели — модуль, который определяет её смысл, структуру и разрешённые операции изменения. Если другой модуль использует эти данные, он обращается к существующей операции или хранит собственное расширение со ссылкой на общую запись. Так у одного бизнес-факта не появляются две независимые версии.

Открытые модули и их данные

Модуль За что отвечает Что учитывать
backend, устанавливаемый как dbsynce Company, Service, Provider, Orders, Documents, DocumentVersion, Permissions, Relationship, CheckDefinition, RequirementCheck и общие требования. Их поля и смысл используются несколькими частями приложения. Изменения должны учитывать API, прежние данные и миграции.
tickets Ticket, его жизненный цикл, комментарии, вложения и операционные события. Статус заявки и допустимый переход меняются через предназначенные операции.
webservice_running Этапы Stage, материалы Artifact, участники, связи и события исполнения. Эти данные дополняют заказ; весь план исполнения не переносится в общую Orders.
payments Платёжные проводки, финансовые снимки и распределение. Локальное описание дополнительной покупки не становится автоматически платёжной проводкой.

Список показывает ответственность. Точные имена классов и фактические связи проверяют по exports, моделям и миграциям нужной версии. У backend начальная точка — models/init.py. Для конкретной сущности читают:

  • её модель;
  • serializer;
  • view;
  • вызывающие функции.

Закрытые компоненты: названия и границы

Конструктор сервиса не относится к открытым модулям в таблице выше. В его LICENSE указана ShariX Proprietary License v1, код sharix-proprietary-v1. То, что модуль может устанавливаться вместе с ShariX Open или использоваться несколькими продуктами, не делает его открытым.

По проверенным лицензионным файлам тот же лицензионный код имеют следующие закрытые компоненты:

Компонент Название репозитория Граница публичного описания
Конструктор сервиса sharix-service-constructor Отдельно лицензируемый компонент настройки сервиса. Внутренние модели и алгоритмы в этой Wiki не описываются.
Проектная среда сервисов sharix-service-projects Отдельный закрытый модуль работы с проектами; не часть открытой модели заказа.
Appointments sharix-appointments Отдельная закрытая функциональность записи и расписаний.
Интеграция Почты России sharix-russian-post Отдельная закрытая интеграция почтовых отправлений.
ShariX Knowledge — Django-модуль sharix-knowledge Закрытый модуль базы знаний. Его лицензия не определяет автоматически лицензию отдельного DokuWiki-плагина.

Это перечень проверенных компонентов, а не полный каталог всех закрытых модулей. Подробности находятся в intrawiki; за ними и согласованием доступа обращаются к ответственным со стороны Platform. Публичная страница может описать разрешённую точку подключения открытого ядра, но не переносит сюда устройство закрытого компонента.

Слово shared означает совместное использование модуля, а не открытую лицензию.

Как выбрать место для нового поля или операции

  1. Назвать факт: что означает значение, кто его создаёт и меняет, кому оно нужно.
  2. Проверить, не хранится ли тот же факт в открытой общей модели и не вычисляется ли уже из связанных данных. Если вопрос касается закрытого компонента, передать его ответственному; отсутствие доступа не компенсируют копированием его моделей в открытое ядро.
  3. Если это общая семантика заказа, изменять её у владельца с проверкой потребителей. Если это особенность одного сервиса, рассмотреть его локальное расширение.
  4. Для нового действия использовать или обоснованно расширить существующую операцию. Нельзя заменить её прямой записью статуса в случайном serializer.
  5. Проверить прежние данные, миграции, права и отрицательные сценарии.

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

Пример: два разных локальных расширения заказа

В webservice_running.models экспортируются две разные Django-модели:

  • OrdersLocalFullTemplate — с полем order_synced;
  • OrdersLocal из models/local_examples.py — с полем order.

Созвучные имена не делают их взаимозаменяемыми.

Перед изменением проверить:

  • какой класс импортирует view;
  • какие поля использует serializer;
  • что сохранялось в БД.

Известное расхождение текущего локального API описано на странице Webservice Running. Исправление имени в одном месте без проверки остальных не подтверждает исправление операции.

Другие границы, которые важно сохранить

  • tickets.Event фиксирует тикетное событие; ExternalEvent относится к внешнему событию исполнения. Одно не заменяют другим по совпадению слова Event.
  • Artifact принадлежит модулю исполнения. Nextcloud может хранить файл, но не становится владельцем бизнес-смысла артефакта.
  • Сущность, извлечённая из документа, не становится автоматически Participant. Для участника нужны своё основание и предусмотренная операция.
  • Функцию общего ядра не копируют в доменный модуль ради обхода её правил; локальную особенность не помещают в ядро без общей причины.

Ядро разрешено изменять ответственно

Правило владельца не запрещает развитие ядра ShariX Open. Перед таким изменением объясняют:

  • требуемое поведение;
  • затронутые API и приложения;
  • совместимость сохранённых данных;
  • переход существующей установки.

Наличие поля или успешный импорт не заменяют проверки поведения.

При разработке сторонней компанией учитывают LICENSE и COMPLIANCE конкретного репозитория и применимые требования к предоставлению исходников. Те же требования к осмысленности изменения и проверке действуют для внутренней разработки. Страница не заменяет лицензию компонента.

Если меняется общий модуль

Общие (shared) модули ShariX Open могут использоваться и в Platform. После публикации изменения нужно оповестить ответственного со стороны Platform и передать:

  • репозитории и commits;
  • описание изменения;
  • результаты проверки.

Ответственный проверяет изменение, тестирует его и оформляет принятие в общий код по своим инструкциям в intrawiki. Действия на Platform не выполняются как продолжение публичной инструкции ShariX Open.

Порядок передачи — shared-изменения. Связанные статьи: API, заказ и Ticket, репозитории.

Основание уточнения

Сверка исходников 28.10.2026: backend 57b98dc, webapp-base e795cd5, tickets fd64704. Карта ответственности согласована с публичным TZ: владельцы репозиториев. Лицензионные требования проверяются по версии конкретного компонента; source-сверка не является приёмкой установленной сборки.

Проверенная исходная база: 29.10.2026

Проверены опубликованные исходники указанных ревизий. Это source-анализ; он не подтверждает применённую версию, конфигурацию или успешный сценарий конкретного сервера.

Исходники, сверенные 31.10.2026

sharixopen/knowledge/architecture/model_ownership.txt · Последнее изменение: — sx_knowledge_api_open

© 2022 ShariX