build 039: complete Quotes Feed migration foundation
This commit is contained in:
205
docs/market_intelligence/builds/build-011-common-events.md
Normal file
205
docs/market_intelligence/builds/build-011-common-events.md
Normal file
@@ -0,0 +1,205 @@
|
||||
# Build 011 — Common Events Layer
|
||||
|
||||
**Build ID:** 011
|
||||
|
||||
**Компонент:** `common/events.py`
|
||||
|
||||
**Статус:** **Accepted**
|
||||
|
||||
---
|
||||
|
||||
# Цель Build
|
||||
|
||||
Реализовать единый слой представления событий подсистемы Market Intelligence.
|
||||
|
||||
Events Layer определяет стандартный формат аналитических событий, которые в дальнейшем смогут использоваться Runtime, журналом, системой диагностики и EventBus.
|
||||
|
||||
Данный Build не реализует публикацию событий и не зависит от конкретного механизма доставки.
|
||||
|
||||
---
|
||||
|
||||
# Реализованные компоненты
|
||||
|
||||
Создан файл:
|
||||
|
||||
```text
|
||||
market_intelligence/common/events.py
|
||||
```
|
||||
|
||||
Реализованы:
|
||||
|
||||
- `MarketIntelligenceEvent`
|
||||
- `build_engine_result_event()`
|
||||
- `build_engine_snapshot_event()`
|
||||
- `build_result_snapshot_event()`
|
||||
- `market_intelligence_event_to_payload()`
|
||||
|
||||
---
|
||||
|
||||
# Архитектурная задача
|
||||
|
||||
До появления данного Build существовали:
|
||||
|
||||
```text
|
||||
EngineResult
|
||||
|
||||
↓
|
||||
|
||||
Payload
|
||||
|
||||
↓
|
||||
|
||||
Snapshot
|
||||
```
|
||||
|
||||
Однако отсутствовало единое архитектурное представление аналитического события.
|
||||
|
||||
После реализации Events Layer любое завершение работы Engine может быть представлено в виде стандартного события Market Intelligence.
|
||||
|
||||
---
|
||||
|
||||
# Архитектурные решения
|
||||
|
||||
В ходе реализации приняты следующие решения.
|
||||
|
||||
## Event является архитектурной моделью
|
||||
|
||||
MarketIntelligenceEvent описывает событие анализа рынка.
|
||||
|
||||
Сам объект события не занимается публикацией.
|
||||
|
||||
Таким образом разделяются:
|
||||
|
||||
```text
|
||||
Event Model
|
||||
|
||||
↓
|
||||
|
||||
Event Transport
|
||||
```
|
||||
|
||||
Это позволяет использовать любые механизмы доставки без изменения модели события.
|
||||
|
||||
---
|
||||
|
||||
## Event строится из существующих моделей
|
||||
|
||||
События создаются исключительно через существующие архитектурные объекты.
|
||||
|
||||
Поддерживаются цепочки:
|
||||
|
||||
```text
|
||||
EngineResult
|
||||
↓
|
||||
Event
|
||||
```
|
||||
|
||||
и
|
||||
|
||||
```text
|
||||
EngineResult
|
||||
↓
|
||||
Snapshot
|
||||
↓
|
||||
Event
|
||||
```
|
||||
|
||||
Никаких дополнительных расчётов внутри Event Layer не выполняется.
|
||||
|
||||
---
|
||||
|
||||
## Payload не дублируется
|
||||
|
||||
Events Layer не сериализует данные самостоятельно.
|
||||
|
||||
Используются уже существующие компоненты:
|
||||
|
||||
- Payload Layer;
|
||||
- Snapshot Layer.
|
||||
|
||||
Это сохраняет принцип единственного источника истины.
|
||||
|
||||
---
|
||||
|
||||
## Независимость от EventBus
|
||||
|
||||
Common Layer определяет только структуру события.
|
||||
|
||||
Он ничего не знает о:
|
||||
|
||||
- EventBus;
|
||||
- Runtime;
|
||||
- Journal;
|
||||
- AutoTrade;
|
||||
- Telegram;
|
||||
- Exchange.
|
||||
|
||||
Таким образом Event Layer остаётся полностью независимым.
|
||||
|
||||
---
|
||||
|
||||
# Compile Check
|
||||
|
||||
Выполнена проверка:
|
||||
|
||||
```bash
|
||||
python -m compileall \
|
||||
src/trading/market_intelligence/common/events.py
|
||||
```
|
||||
|
||||
Результат:
|
||||
|
||||
```text
|
||||
Compile successful
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Architecture Review
|
||||
|
||||
Результат:
|
||||
|
||||
**PASSED**
|
||||
|
||||
Проверено:
|
||||
|
||||
- соблюдение Single Responsibility;
|
||||
- отсутствие публикации событий;
|
||||
- отсутствие торговой логики;
|
||||
- использование существующих моделей;
|
||||
- независимость от Runtime;
|
||||
- отсутствие циклических зависимостей.
|
||||
|
||||
Архитектурных замечаний не выявлено.
|
||||
|
||||
---
|
||||
|
||||
# Domain Review
|
||||
|
||||
Результат:
|
||||
|
||||
**PASSED**
|
||||
|
||||
Проверено:
|
||||
|
||||
- событие отражает только факт завершения анализа;
|
||||
- отсутствуют торговые действия;
|
||||
- отсутствуют Runtime-решения;
|
||||
- структура пригодна для журналирования;
|
||||
- структура соответствует Runtime Contract.
|
||||
|
||||
Замечаний не выявлено.
|
||||
|
||||
---
|
||||
|
||||
# Итог Build
|
||||
|
||||
Build завершил создание общего Events Layer.
|
||||
|
||||
Market Intelligence получил единый формат аналитических событий, который может использоваться любыми внешними компонентами платформы.
|
||||
|
||||
---
|
||||
|
||||
# Build Status
|
||||
|
||||
**Accepted**
|
||||
Reference in New Issue
Block a user