Версия: 2.0.0
Дата: 2025-11-10
CIFRA использует 2 метафоры композиции:
Project = [Module1] + [Module2] + [Module3]
Модули независимы и могут комбинироваться.
Platform
└─ Application
└─ Module
└─ Entity
└─ Field
Иерархия вложенности.
Пример:
project:
modules:
- contacts # ← Lego блок
- deals # ← Lego блок
modules:
contacts:
entities:
- Contact # ← Matryoshka уровень
entities:
Contact:
fields: # ← Matryoshka уровень
- name
- email
L1: PLATFORM (Core Engine)
Неизменяемая основа
L2: CONFIGURATION (.cifra files)
Переиспользуемые шаблоны
L3: INSTANCE SETTINGS
Настройки конкретного клиента
L4: USER DATA
Реальные записи в БД
Пример:
L1: Платформа определяет "Entity" и "Field"
L2: crm.cifra определяет Entity "Contact"
L3: instance_settings.yaml: database="postgresql://..."
L4: INSERT INTO contacts VALUES ('John', 'john@example.com')
Идея: Правила наследуются как в CSS.
# Global
theme:
colors:
primary: blue
# Module (override)
modules:
deals:
theme:
colors:
primary: red
# Entity (override)
entities:
Contact:
theme:
colors:
primary: green
Результат:
- Global: primary=blue
- Module: primary=red (переопределён)
- Entity: primary=green (переопределён)
Meta-model — описание структуры:
class ContactMeta:
fields = [
FieldMeta(name='name', type='string'),
FieldMeta(name='email', type='email')
]
Data model — реальные данные:
contact = Contact(name='John', email='john@example.com')
BaseEntity
└─ Entity (Contact, Deal, Order)
BaseField
└─ StringField, EmailField, MoneyField...
BaseModule
└─ ContactsModule, DealsModule...
Следующий документ: ARCHITECTURE.md →