architect/standards/arch-class-system.md

type: standard
layer: arch
object: class
aspect: system
form: table
title: "Классовая система платформы"
status: active
version: 1.0.0
date: 2026-04-11
knowledge_level: У1
parent: arch-document-system.md
deps:
- arch-document-system.md
- arch-filesystem-structure.md
- arch-component-structure.md


Классовая система платформы

Стандарт определяет четвёртый слой платформенного знания: классы. Всё в платформе — экземпляр класса, унаследованного от абстрактного класса в architect/. Реестр базовых классов, правила наследования, обязательные поля.


1. ЗАЧЕМ НУЖНЫ КЛАССЫ

Три нижних слоя платформы описывают форму:

Слой Что описывает
Файловая система где лежит
Правила и именование как называется
Документы что содержит
Классы чем является, от чего наследует

Классы дают:
- Полиморфизм — единый интерфейс для разных компонентов одного типа
- Наследование — шаблон в projector/ конкретизирует абстракцию из arch/
- Инстанциирование — реальный компонент в system/, coder/, projects/ реализует шаблон
- Валидация — можно проверить, что компонент соответствует своему классу


2. ЦЕПОЧКА НАСЛЕДОВАНИЯ

arch/           ← абстрактный класс (правила, интерфейс)
  ↓ extends
projector/      ← шаблонный класс (заготовка с переменными)
  ↓ instantiates
system/         ← экземпляр (реальный компонент)
coder/          ← экземпляр
projects/       ← экземпляр

Пример для сервиса:

arch-component-structure.md           ServiceComponent (абстракция)
  
projector/templates/@service/         ServiceTemplate (шаблон)
  
infra/@nocodb.service/                NocoDBService (экземпляр)

3. РЕЕСТР БАЗОВЫХ КЛАССОВ

Компоненты (Component)

Класс Суффикс Слой Описание
ServiceComponent .service infra/, system/ Сервис Docker Compose
ServerComponent .server, .pc, .infra infra/ Физический/виртуальный сервер
AgentComponent .agent system/ AI-агент с AI.md
ApiComponent .api, .connector library/, infra/ REST/GraphQL коннектор
DataComponent .data library/connectors/data/ БД / хранилище коннектор
StorageComponent .storage infra/, library/ S3 / файловое хранилище
CoderComponent .coder coder/ Специализированный кодер
LibraryComponent .lib library/ Переиспользуемая библиотека
BotComponent .bot system/ Telegram-бот
UiComponent .ui, .web, .portal, .app system/, infra/ Веб-интерфейс / приложение

Документы (Document)

Класс Тип Описание
StandardDocument standard Стандарт платформы (arch/)
ConceptDocument concept Концептуальный документ
PatternDocument pattern Паттерн реализации
TemplateDocument template Шаблон для заполнения
DecisionDocument decision Архитектурное решение (ADR)
GuideDocument guide Руководство (howto)
OperationDocument operation Описание операции

Проекты (Project)

Класс Тип Описание
BizProject biz Бизнес-проект без IT-части
ItProject it IT-проект (см. arch-project-it-structure.md)
SysProject sys Системный проект (инфра, платформа)

Политики (Policy)

Класс Наследует Описание
PolicyConfidentiality П1 КОНФИДЕНЦИАЛЬНОСТЬ — базовый класс
PolicyCodeData PolicyConfidentiality П2 КОД/ДАННЫЕ
PolicyServices PolicyConfidentiality П3 СЕРВИСЫ
PolicyGit PolicyConfidentiality П4 GIT
PolicyResources PolicyConfidentiality П5 РЕСУРСЫ
PolicyAgents PolicyConfidentiality П6 АГЕНТЫ
PolicyLocking PolicyConfidentiality П7 БЛОКИРОВКА
SecurityCredentials PolicyConfidentiality С1 CREDENTIALS
SecurityBackup PolicyConfidentiality С2 BACKUP
SecurityRollback PolicyConfidentiality С3 ROLLBACK

Маппинг type: → class:

Полная таблица соответствия значений поля type: в frontmatter и классов из реестра:

type: Класс Типичное расположение
standard StandardDocument arch/standards/
concept ConceptDocument arch/concept/
pattern PatternDocument arch/patterns/
template TemplateDocument projector/templates/
decision DecisionDocument arch/decisions/
guide GuideDocument arch/guidance/
operation OperationDocument arch/standards/ (операции)
agent AgentComponent system/@{имя}.agent/
service ServiceComponent system/, infra/, services/
api ApiComponent coder/library/@{имя}.api/
data DataComponent coder/library/@{имя}.data/
storage StorageComponent coder/library/@{имя}.storage/
coder CoderComponent coder/@{имя}.coder/
bot BotComponent system/@{имя}.bot/
ui UiComponent system/@{имя}.ui/
it ItProject projects/org/{домен}/{проект}/
biz BizProject projects/org/{домен}/{проект}/
sys SysProject projects/sys/{проект}/

При создании нового документа или компонента: найти type: в левой колонке → взять класс для поля class: или объявления в AI.md.


4. ОБЪЯВЛЕНИЕ КЛАССА В КОМПОНЕНТЕ

index.yaml

Каждый компонент объявляет свой класс в index.yaml:

id: nocodb
type: service
layer: infra
version: "1.0.0"
status: active
class: ServiceComponent
parent: infra/
extends: projector/templates/@service/
deps: []
Поле Обязательно Описание
class Имя базового класса из реестра
extends если есть шаблон Путь к шаблону в projector/
parent Родительский узел файловой системы
deps если есть Зависимости от других компонентов

AI.md агента

Каждый агент явно объявляет наследование политик:

---
extends: PolicyConfidentiality
class: AgentComponent
---

И конкретизирует зону конфиденциальности:

## КОНФИДЕНЦИАЛЬНО В ЭТОЙ ЗОНЕ
- ...специфичные для агента данные...

5. ПРАВИЛА НАСЛЕДОВАНИЯ

Обязательные правила

✅  Каждый компонент объявляет class: в index.yaml
✅  Каждый агент объявляет extends: PolicyConfidentiality в AI.md
✅  Шаблон в projector/ расширяет абстрактный класс из arch/
✅  Экземпляр не противоречит классу (нет полей запрещённых классом)

Запреты

  Создавать компонент без class: в index.yaml
  Агент без PolicyConfidentiality
  Наследовать минуя уровень (instance  abstract, пропуская template)
  Переопределять locked-поля класса без @keeper.agent

Миграция (ретроактивный патч)

Существующие компоненты без class: — патчить отдельной операцией после финализации arch-class-system.md.
Список: BACKLOG.md — пункт 15.


6. ИНСТАНЦИИРОВАНИЕ НОВОГО КОМПОНЕНТА

При создании нового компонента:

1. Определить тип  выбрать класс из реестра
2. Найти шаблон в projector/templates/@{тип}/
3. Скопировать шаблон  заполнить переменные
4. Добавить class: и extends: в index.yaml
5. Создать тройку AI.md + CLAUDE.md + (README.md если публичный)
6. Зарегистрировать в родительском CLAUDE.md

7. СВЯЗАННЫЕ ДОКУМЕНТЫ