Версия: 1.0
Дата создания: 2025-11-10
Архитектура: Feature-Sliced Design (FSD)
Статус: Production ready
Библиотека переиспользуемых компонентов, организованная по Feature-Sliced Design.
Проблема:
Генерация компонентов с нуля → 1000-5000 tokens
Решение:
Копировать готовый компонент → Адаптировать → 200-500 tokens (экономия 80-90%)
Организация по слоям (layers), каждый слой может использовать только слои ниже (one-way flow).
┌─────────────────────────────────────────┐
│ widgets/ Сложные UI блоки │ ← Самый высокий уровень
├─────────────────────────────────────────┤
│ features/ Бизнес-фичи │
├─────────────────────────────────────────┤
│ entities/ Бизнес-сущности │
├─────────────────────────────────────────┤
│ shared/ Переиспользуемый код │ ← Самый низкий уровень
└─────────────────────────────────────────┘
Правило: widgets может использовать features, entities, shared
Правило: features может использовать entities, shared
Правило: entities может использовать только shared
components/
│
├── entities/ # Бизнес-сущности
│ ├── user/
│ │ ├── model.py # Модель User
│ │ ├── api.py # API для работы с User
│ │ └── ui.py # UI компоненты (UserCard, UserAvatar)
│ │
│ ├── order/
│ │ ├── model.py
│ │ ├── api.py
│ │ └── ui.py
│ │
│ └── product/
│ ├── model.py
│ ├── api.py
│ └── ui.py
│
├── features/ # Бизнес-фичи (действия пользователя)
│ ├── auth/
│ │ ├── login/ # Фича: вход в систему
│ │ │ ├── ui.py # LoginForm
│ │ │ └── model.py # login logic
│ │ │
│ │ └── logout/ # Фича: выход
│ │ └── ui.py
│ │
│ ├── order-create/
│ │ ├── ui.py # CreateOrderForm
│ │ └── model.py # create order logic
│ │
│ └── filter-table/
│ ├── ui.py # FilterPanel
│ └── model.py # filtering logic
│
├── widgets/ # Сложные UI блоки (композиты)
│ ├── header/
│ │ └── ui.py # Header (logo + nav + user menu)
│ │
│ ├── sidebar/
│ │ └── ui.py # Sidebar (navigation)
│ │
│ └── order-table/
│ └── ui.py # OrderTable (table + filters + export)
│
└── shared/ # Переиспользуемый код (низший уровень)
├── ui/ # UI примитивы (atoms)
│ ├── button.py
│ ├── input.py
│ ├── card.py
│ └── modal.py
│
├── lib/ # Утилиты
│ ├── formatters.py # format_currency, format_date
│ ├── validators.py # validate_email, validate_phone
│ └── helpers.py # common helpers
│
├── api/ # API клиенты
│ ├── base_client.py # BaseAPIClient
│ └── http.py # HTTP utilities
│
└── config/ # Конфигурация
├── constants.py
└── settings.py
Назначение: Базовые утилиты, UI примитивы, конфигурация
Примеры:
- shared/ui/button.py — кнопка
- shared/lib/formatters.py — format_currency()
- shared/api/base_client.py — базовый API клиент
Правило: НЕ зависит ни от чего выше
Назначение: Модели данных и базовые операции
Примеры:
- entities/user/model.py — User model (SQLAlchemy)
- entities/user/api.py — get_user(), update_user()
- entities/user/ui.py — UserCard, UserAvatar
Правило: Может использовать только shared/
Назначение: Действия пользователя, use cases
Примеры:
- features/auth/login/ — вход в систему
- features/order-create/ — создание заказа
- features/filter-table/ — фильтрация таблицы
Правило: Может использовать entities/ и shared/
Назначение: Композитные компоненты из features + entities
Примеры:
- widgets/header/ — Header (navigation + user menu)
- widgets/order-table/ — OrderTable (table + filters + actions)
Правило: Может использовать features/, entities/, shared/
# В любом компоненте
from components.shared.ui.button import Button
# Использование
Button(text="Сохранить", type="primary", on_click=save_handler)
# В feature или widget
from components.entities.user.model import User
from components.entities.user.api import get_user
user = get_user(user_id=123)
# На странице авторизации
from components.features.auth.login.ui import LoginForm
LoginForm(on_success=handle_login_success)
# На странице заказов
from components.widgets.order_table.ui import OrderTable
OrderTable(filters=filters, on_export=handle_export)
shared не может импортировать entitiesВопросы:
- Это базовая утилита? → shared/
- Это модель данных? → entities/
- Это действие пользователя? → features/
- Это композитный UI блок? → widgets/
# Пример: новая фича "экспорт заказов"
mkdir -p components/features/order-export
touch components/features/order-export/{ui.py,model.py,__init__.py}
# components/features/order-export/model.py
def export_orders_to_excel(orders):
"""Экспортировать заказы в Excel"""
# логика экспорта
pass
# components/features/order-export/ui.py
def ExportButton(orders, filename):
"""Кнопка экспорта заказов"""
# UI компонент
pass
Добавить в components/catalog.yaml
# tests/components/features/test_order_export.py
def test_export_orders_to_excel():
orders = [...]
result = export_orders_to_excel(orders)
assert result.endswith('.xlsx')
Components = уровень L4 в каскаде поиска.
L1: Platform rules (85%)
L2: External libraries (98%)
L3: Templates (99.5%)
L4: Components (99.8%) ← ВЫ ЗДЕСЬ
L5: Projects code (99.95%)
L6: Archive (100%)
L7: Generate (последний вариант)
Workflow:
1. Нужен компонент → искать в components/catalog.yaml
2. Нашёл → копировать и адаптировать
3. Не нашёл → искать в templates/ или projects/
4. Всё равно нет → генерировать с нуля
| Тип компонента | Генерация | Переиспользование | Экономия |
|---|---|---|---|
| UI primitive (Button) | 500 tokens | 100 tokens | 80% |
| Entity (User model) | 1500 tokens | 300 tokens | 80% |
| Feature (Login) | 3000 tokens | 500 tokens | 83% |
| Widget (OrderTable) | 5000 tokens | 800 tokens | 84% |
Средняя экономия: 80-85%
Текущее состояние:
- Entities: 0 (TODO)
- Features: 0 (TODO)
- Widgets: 0 (TODO)
- Shared: 0 (TODO)
План:
- Извлечь 10+ компонентов из marketplace
- Создать базовые shared/ui компоненты
- Задокументировать все компоненты
@mui/material/
├── Button/
├── TextField/
├── Card/
└── ...
antd/
├── button/
├── form/
├── table/
└── ...
components/
├── shared/ui/button.py ← аналог Button
├── entities/user/ ← бизнес-модель
├── features/auth/login/ ← use case
└── widgets/header/ ← композит
Отличие: Мы не только UI, но и business logic, API, models.
components/catalog.yamlregistry/INDEX.yaml (external libraries)templates/ (project templates)tests/library/ (component tests)Версия: 1.0
Дата: 2025-11-10
Статус: Infrastructure ready, components TODO