85 KiB
Dzentra Market Intelligence Architecture Principles
Engineering Standard Release
Контроль документа
| Свойство | Значение |
|---|---|
| Документ | Dzentra Market Intelligence Architecture Principles |
| Тип документа | Engineering Standard |
| Версия | 2.0 |
| Статус | Release |
| Подсистема | Market Intelligence |
| Проект | Dzentra |
| Владелец стандарта | Dzentra Architecture |
| Язык | Русский |
| Применяется к | Архитектуре подсистемы Market Intelligence |
Оглавление
Общие положения
- Контроль документа
- Статус документа
- Управление стандартом
- Соответствие стандарту
- Нормативная терминология
- Официальная терминология
- Назначение
- Область применения
- Главная архитектурная идея
- Архитектурная философия
- Общие положения
Part I. Фундаментальные архитектурные принципы
- Архитектурные принципы
- Взаимосвязь архитектурных принципов
- Непрерывность развития архитектуры
- Централизованный жизненный цикл Engine
Part II. Архитектурная модель платформы
- Общая архитектурная модель
- Архитектурные слои
- Архитектурные компоненты
- Модель ответственности
- Модель зависимостей
- Поток данных
- Поток управления
Part III. Архитектурные ограничения
- Общие ограничения
- Ограничения Common Layer
- Ограничения Runtime Layer
- Ограничения Engine Layer
- Ограничения Coordinator Layer
- Ограничения взаимодействия
- Запрещённые архитектурные решения
Part IV. Архитектурные инварианты
- Инварианты платформы
- Инварианты Common Layer
- Инварианты Runtime Layer
- Инварианты Engine Layer
- Инварианты Coordinator Layer
- Инварианты контрактов
- Инварианты развития
Part V. Эволюция архитектуры
- Общие принципы развития
- Расширение архитектуры
- Изменение архитектуры
- Архитектурная стабильность
Part VI. Архитектурная согласованность
- Архитектурная целостность
- Архитектурная простота
- Архитектурная сопровождаемость
- Архитектурная масштабируемость
Part VII. Заключительные положения
- Соответствие стандарту
- Развитие стандарта
- Архитектурная аксиома
- Заключительные положения
Приложения
- Приложение А. Архитектурный глоссарий
- Приложение Б. Архитектурные инварианты
- Приложение В. Каталог архитектурных диаграмм
- Приложение Г. Архитектурные шаблоны
- Приложение Д. Примеры допустимых архитектурных зависимостей
- Приложение Е. Примеры недопустимых архитектурных решений
Статус документа
Настоящий документ имеет статус Release.
Документ является официальным архитектурным стандартом подсистемы Market Intelligence проекта Dzentra.
Настоящий стандарт определяет фундаментальные законы построения архитектуры платформы и устанавливает обязательные требования к организации её архитектурных компонентов, архитектурных связей и долгосрочного развития.
Настоящий документ не определяет инженерный процесс разработки.
Порядок разработки, выполнения Build, проведения инженерных проверок и сопровождения документации определяется документом Development Process.
Изменение настоящего стандарта допускается исключительно посредством выпуска новой официальной версии документа.
Управление стандартом
Настоящий документ определяет фундаментальные архитектурные принципы платформы Market Intelligence.
Все архитектурные решения должны соответствовать требованиям настоящего стандарта независимо от:
- используемого языка программирования;
- способа реализации компонентов;
- стадии развития платформы;
- количества участников разработки;
- используемых инженерных инструментов.
Настоящий стандарт определяет исключительно архитектурные требования.
Инженерный процесс разработки, порядок выполнения Build и проведение Engineering Review регулируются документом Development Process.
Включение нового архитектурного принципа допускается только при одновременном выполнении следующих условий:
- принцип обладает долгосрочной архитектурной ценностью;
- принцип подтверждён практикой разработки;
- принцип уменьшает архитектурную сложность платформы;
- принцип повышает сопровождаемость архитектуры;
- принцип не противоречит существующей архитектурной модели.
Локальные архитектурные решения отдельных Build не могут изменять фундаментальные требования настоящего стандарта.
При возникновении противоречий приоритет имеет настоящий документ.
Соответствие стандарту
Архитектура платформы считается соответствующей настоящему стандарту только при соблюдении всех обязательных архитектурных требований, определённых данным документом.
Нарушение любого обязательного архитектурного принципа рассматривается как архитектурный дефект независимо от корректности реализации отдельных компонентов.
Рекомендации настоящего стандарта не являются обязательными, однако рассматриваются как предпочтительная архитектурная практика.
Проверка соответствия архитектуры выполняется посредством процедур Architecture Review, определённых документом Development Process.
Нормативная терминология
Во всём тексте настоящего документа используются следующие нормативные формулировки.
| Формулировка | Значение |
|---|---|
| Должен | Обязательное архитектурное требование. |
| Не должен | Архитектурное действие запрещено. |
| Обязан | Обязательное действие архитектурного компонента или участника разработки. |
| Не допускается | Полный запрет соответствующего архитектурного решения. |
| Следует | Предпочтительная архитектурная практика, допускающая обоснованные исключения. |
| Рекомендуется | Наиболее предпочтительный способ построения архитектуры. |
| Может | Допустимое архитектурное решение при соблюдении остальных требований настоящего стандарта. |
Если явно не указано иное, все перечисленные формулировки используются исключительно в приведённых выше значениях.
Официальная терминология
В целях единообразного понимания настоящего стандарта используются следующие определения.
| Термин | Определение |
|---|---|
| Архитектура | Совокупность архитектурных компонентов, их ответственности, взаимосвязей и ограничений. |
| Архитектурный принцип | Фундаментальное правило построения архитектуры платформы. |
| Архитектурный компонент | Самостоятельная архитектурная сущность с определённой областью ответственности. |
| Layer | Архитектурный уровень платформы. |
| Common Layer | Наиболее стабильный архитектурный уровень, содержащий общие модели, типы, перечисления и базовые архитектурные сущности. |
| Runtime Layer | Архитектурный уровень, определяющий состояние платформы и официальные контракты взаимодействия компонентов. |
| Engine | Независимый аналитический компонент, реализующий один вид анализа рынка. |
| Coordinator | Архитектурный компонент, координирующий работу нескольких Engine без реализации собственной аналитической логики. |
| Contract | Официальный контракт взаимодействия между архитектурными компонентами. |
| Инвариант | Архитектурное свойство, которое обязано сохраняться независимо от развития платформы. |
Все перечисленные термины используются исключительно в приведённых выше значениях.
Назначение
Настоящий документ определяет фундаментальные архитектурные принципы построения подсистемы Market Intelligence проекта Dzentra.
Стандарт устанавливает обязательные требования к:
- архитектурной модели платформы;
- организации архитектурных компонентов;
- распределению архитектурной ответственности;
- архитектурным зависимостям;
- архитектурным ограничениям;
- долгосрочному развитию архитектуры.
Настоящий документ определяет архитектурные законы платформы и не регламентирует инженерный процесс разработки.
Все вопросы, связанные с жизненным циклом Build, Engineering Review, сопровождением документации и организацией разработки, регулируются документом Development Process.
Область применения
Настоящий стандарт распространяется на все архитектурные компоненты подсистемы Market Intelligence, включая:
- Common Layer;
- Runtime Layer;
- Runtime Contract;
- Engine Layer;
- Coordinator Layer;
- архитектурные модели;
- архитектурные контракты;
- взаимодействие архитектурных компонентов;
- развитие архитектуры платформы.
Требования настоящего стандарта обязательны для всех существующих и будущих архитектурных компонентов подсистемы Market Intelligence независимо от способа реализации и времени их создания.
Связанные документы
Настоящий стандарт применяется совместно со следующими инженерными документами.
| Документ | Назначение |
|---|---|
| Development Process | Определяет инженерный процесс разработки платформы. |
| Runtime Contract | Определяет официальные контракты взаимодействия компонентов. |
| Architecture Decision Records | Фиксируют долгосрочные архитектурные решения. |
| Build Documentation | Фиксирует историю архитектурного развития платформы. |
| Engineering Reviews | Подтверждают соответствие архитектуры требованиям стандартов. |
Настоящий документ не дублирует содержание указанных документов и определяет исключительно фундаментальные архитектурные требования.
Главная архитектурная идея
Подсистема Market Intelligence создаётся не как совокупность технических индикаторов и не как механизм генерации торговых сигналов.
Market Intelligence представляет собой самостоятельную аналитическую подсистему, предназначенную для формирования объективной модели текущего состояния рынка.
Главная задача платформы заключается не в вычислении отдельных технических показателей, а в построении целостного понимания поведения рынка посредством совместной работы специализированных аналитических компонентов.
Главный вопрос, на который должна отвечать архитектура платформы, формулируется следующим образом.
Что происходит с рынком в настоящий момент?
Ответ на данный вопрос является результатом согласованной работы независимых архитектурных компонентов, каждый из которых отвечает только за собственную область анализа.
Архитектурная философия
Архитектура является главным инженерным активом платформы.
Исходный код представляет собой реализацию архитектурных решений, а не источник архитектуры.
Архитектурные решения принимаются с расчётом на многолетнее развитие платформы.
Основной целью архитектуры является создание системы, способной непрерывно расширяться без накопления архитектурной сложности, архитектурного долга и потери сопровождаемости.
Каждый новый компонент должен естественным образом интегрироваться в существующую архитектуру без нарушения её фундаментальных принципов.
Архитектура должна оставаться понятной, последовательной и объяснимой независимо от размера платформы.
Общие положения
Настоящий документ определяет фундаментальные законы построения архитектуры подсистемы Market Intelligence.
Все архитектурные решения обязаны соответствовать данным законам независимо от используемых технологий и особенностей реализации.
Настоящий документ определяет:
- фундаментальные архитектурные принципы;
- архитектурную модель платформы;
- архитектурные ограничения;
- архитектурные инварианты;
- правила долгосрочного развития архитектуры.
Настоящий документ не регламентирует:
- процесс разработки;
- жизненный цикл Build;
- инженерные проверки;
- сопровождение инженерной документации;
- организацию совместной разработки.
Указанные вопросы регулируются документом Development Process.
Архитектурные принципы настоящего документа являются фундаментом всей архитектуры подсистемы Market Intelligence.
Ни одно архитектурное решение не должно противоречить требованиям настоящего стандарта.
Part I. Фундаментальные архитектурные принципы
Архитектурные принципы
Настоящий раздел определяет фундаментальные принципы построения архитектуры подсистемы Market Intelligence.
Каждый принцип представляет собой самостоятельное обязательное архитектурное требование.
Все принципы применяются совместно и образуют единую архитектурную модель платформы.
Нарушение любого из указанных принципов рассматривается как нарушение архитектурной целостности платформы.
Принцип 1. Architecture First
Архитектура всегда предшествует реализации.
До начала разработки любого архитектурного компонента должны быть определены:
- назначение компонента;
- область архитектурной ответственности;
- место компонента в общей архитектуре;
- архитектурные зависимости;
- публичные контракты взаимодействия;
- ограничения компонента.
Исходный код рассматривается исключительно как реализация заранее определённой архитектуры.
Архитектура не должна формироваться под влиянием существующей реализации.
Принцип 2. Stable Foundation
Архитектура развивается последовательно — от наиболее стабильных компонентов к наиболее изменяемым.
Фундаментальные архитектурные слои должны изменяться значительно реже прикладных компонентов.
Каждый следующий уровень архитектуры может строиться только на полностью сформированном предыдущем уровне.
Изменение фундаментальных компонентов допускается исключительно при наличии подтверждённой архитектурной необходимости.
Принцип 3. One Source of Truth
Каждая архитектурная сущность должна иметь единственный официальный источник определения.
К таким сущностям относятся:
- модели;
- перечисления;
- контракты;
- типы;
- константы;
- диагностические коды;
- архитектурные правила.
Повторное определение одной и той же сущности не допускается.
Дублирование архитектурных знаний рассматривается как архитектурный дефект.
Принцип 4. Single Responsibility
Каждый архитектурный компонент отвечает только за одну область ответственности.
Ответственность компонента должна быть:
- очевидной;
- изолированной;
- объяснимой;
- документированной.
Если компонент начинает выполнять несколько независимых функций, архитектура должна быть переработана посредством разделения компонента.
Принцип 5. Layer Isolation
Архитектура платформы строится как система независимых архитектурных слоёв.
Каждый слой обладает собственной областью ответственности.
Внутренняя реализация слоя не должна использоваться другими слоями напрямую.
Взаимодействие между слоями допускается исключительно посредством официальных архитектурных контрактов.
Изоляция слоёв является обязательным условием сопровождаемости платформы.
Принцип 6. Component Independence
Каждый архитектурный компонент должен быть максимально независимым.
Компонент не должен:
- использовать внутреннюю реализацию других компонентов;
- создавать скрытые зависимости;
- зависеть от деталей реализации соседних компонентов;
- формировать циклические зависимости.
Компоненты взаимодействуют исключительно посредством официальных контрактов.
Принцип 7. Explainable Architecture
Любое архитектурное решение должно быть объяснимым.
Для каждого архитектурного компонента должна существовать возможность объяснить:
- зачем он существует;
- какую задачу решает;
- почему расположен именно в данном архитектурном слое;
- почему выбран именно такой способ взаимодействия.
Необъяснимые архитектурные решения считаются потенциальными источниками архитектурного долга.
Принцип 8. Runtime Neutrality
Runtime не должен содержать предметной, аналитической или торговой логики.
Runtime отвечает исключительно за:
- описание состояния;
- архитектурные контракты;
- модели взаимодействия;
- события Runtime.
Любая логика анализа должна располагаться за пределами Runtime Layer.
Принцип 9. Engine Independence
Каждый аналитический Engine является полностью самостоятельным архитектурным компонентом.
Engine не должен зависеть от внутренней реализации других Engine.
Обмен результатами анализа осуществляется только посредством официальных контрактов Runtime либо Coordinator.
Это обеспечивает независимое развитие аналитических движков.
Принцип 10. Centralized Engine Lifecycle
Экземпляры аналитических Engine создаются исключительно компонентом RuntimeRunner.
Ни один другой компонент платформы не имеет права самостоятельно создавать экземпляры Engine.
Данное правило обеспечивает:
- единый жизненный цикл Engine;
- централизованный контроль выполнения;
- возможность профилирования;
- поддержку параллельного выполнения;
- поддержку отмены выполнения;
- централизованную обработку ошибок;
- минимизацию связанности компонентов Runtime.
Запрещается создание экземпляров Engine внутри:
- RuntimeRegistry;
- Coordinator;
- AutoTrade;
- Telegram;
- других Engine;
- любых компонентов, не являющихся RuntimeRunner.
RuntimeRunner является единственной точкой создания экземпляров Engine.
Все Engine обязаны иметь конструктор без пользовательских параметров.
Всё изменяемое состояние анализа передаётся исключительно через EngineContext.
Принцип 11. No Duplicate Logic
Каждый алгоритм должен существовать только в одном месте архитектуры.
Перед созданием новой реализации необходимо определить:
- существует ли аналогичный алгоритм;
- возможно ли повторное использование;
- требуется ли расширение существующего решения.
Повторная реализация существующей логики запрещается.
Принцип 12. Documentation Is Architecture
Архитектурная документация рассматривается как часть архитектуры платформы.
Архитектурное решение считается завершённым только после его документирования.
Изменение архитектуры автоматически означает необходимость актуализации соответствующей документации.
Документация должна описывать архитектурные решения, а не детали реализации.
Принцип 13. Long-Term Maintainability
Все архитектурные решения принимаются с расчётом на долгосрочное развитие платформы.
При выборе между несколькими допустимыми вариантами предпочтение должно отдаваться решению, которое:
- уменьшает архитектурную сложность;
- повышает сопровождаемость;
- улучшает масштабируемость;
- облегчает повторное использование компонентов;
- минимизирует вероятность возникновения архитектурного долга.
Краткосрочное упрощение реализации не должно ухудшать долгосрочное качество архитектуры.
Принцип 14. Evolution Without Degradation
Архитектура должна обеспечивать возможность непрерывного расширения платформы без ухудшения её качества.
Добавление новых компонентов не должно:
- увеличивать связанность системы;
- нарушать архитектурные границы;
- изменять фундаментальные принципы;
- усложнять понимание архитектуры.
Развитие платформы должно происходить посредством последовательного расширения существующей архитектуры.
Принцип 15. Architectural Simplicity
Архитектурная простота рассматривается как самостоятельная архитектурная ценность.
При наличии нескольких архитектурно корректных решений предпочтение должно отдаваться наиболее простому.
Под архитектурной простотой понимаются:
- минимальное количество зависимостей;
- отсутствие скрытого поведения;
- минимальное количество уровней взаимодействия;
- высокая объяснимость архитектуры;
- очевидность распределения ответственности.
Простота не должна достигаться ценой потери архитектурной целостности.
Взаимосвязь архитектурных принципов
Фундаментальные архитектурные принципы образуют единую взаимосвязанную систему.
Ни один принцип не должен рассматриваться отдельно от остальных.
Каждый архитектурный принцип усиливает действие других принципов и применяется совместно с ними.
При наличии нескольких допустимых архитектурных решений предпочтение должно отдаваться варианту, который в наибольшей степени соответствует совокупности принципов настоящего стандарта.
Фундаментальные архитектурные принципы являются неизменяемой основой всей архитектуры платформы Market Intelligence.
Непрерывность развития архитектуры
Архитектура платформы рассматривается как непрерывно развивающаяся система.
Каждое новое архитектурное решение должно быть совместимо с фундаментальными принципами настоящего стандарта.
Развитие платформы должно происходить посредством последовательного расширения существующей архитектуры, а не посредством её периодического перепроектирования.
Каждый новый компонент должен:
- сохранять архитектурную целостность;
- поддерживать архитектурную согласованность;
- уменьшать сложность дальнейшего развития;
- обеспечивать возможность безопасного масштабирования платформы.
Фундаментальные архитектурные принципы остаются неизменной основой архитектуры независимо от количества Build, реализованных компонентов и этапов развития проекта.
Part II. Архитектурная модель платформы
Настоящая часть определяет официальную архитектурную модель подсистемы Market Intelligence.
Архитектурная модель устанавливает:
- состав архитектурных слоёв;
- состав архитектурных компонентов;
- распределение ответственности;
- правила взаимодействия;
- допустимые направления зависимостей;
- движение данных внутри платформы.
Все существующие и будущие компоненты платформы обязаны соответствовать данной архитектурной модели.
Общая архитектурная модель
Подсистема Market Intelligence представляет собой самостоятельную аналитическую платформу.
Архитектура платформы строится как последовательность независимых архитектурных слоёв.
Каждый слой имеет собственную область ответственности и взаимодействует с другими слоями исключительно посредством официальных архитектурных контрактов.
Общая архитектурная модель имеет следующий вид.
External Market Data
│
▼
Market Data Provider
│
▼
Common Layer
│
▼
Runtime Contract
│
▼
Runtime Layer
│
▼
Engine Layer
│
▼
Coordinator Layer
│
▼
Market Intelligence Result
Архитектура строится снизу вверх.
Зависимости направлены только сверху вниз.
Нижележащие компоненты не должны зависеть от вышележащих.
Архитектурные слои
Архитектура платформы состоит из нескольких независимых слоёв.
Каждый слой имеет единственную область ответственности.
Common Layer
Common Layer является фундаментом всей платформы.
Данный слой содержит наиболее стабильные архитектурные сущности.
К Common Layer относятся:
- перечисления;
- типы;
- модели;
- константы;
- диагностические коды;
- общие архитектурные структуры.
Common Layer не зависит ни от одного другого слоя платформы.
Runtime Contract
Runtime Contract определяет официальные контракты взаимодействия компонентов.
Runtime Contract является единственным допустимым способом обмена информацией между архитектурными компонентами.
Изменение Runtime Contract рассматривается как архитектурное изменение.
Runtime Layer
Runtime Layer представляет текущее состояние аналитической платформы.
Runtime Layer отвечает исключительно за:
- хранение состояния;
- модели состояния;
- события Runtime;
- жизненный цикл Runtime.
Runtime Layer не содержит аналитической логики.
Engine Layer
Engine Layer реализует аналитическую обработку рынка.
Каждый Engine представляет самостоятельный архитектурный компонент.
Каждый Engine реализует только один независимый аспект анализа рынка.
Например:
- Trend Engine;
- Wave Engine;
- Liquidity Engine;
- Volatility Engine;
- Market Cycle Engine.
Количество Engine не ограничивается.
Coordinator Layer
Coordinator Layer координирует работу аналитических Engine.
Coordinator:
- определяет последовательность выполнения Engine;
- объединяет результаты анализа;
- управляет зависимостями между вычислениями;
- публикует итоговый аналитический результат.
Coordinator не реализует собственную аналитику.
Архитектурные компоненты
Каждый архитектурный компонент платформы является самостоятельной архитектурной единицей.
Компонент обязан иметь:
- единственную область ответственности;
- официальный публичный контракт;
- определённые архитектурные границы;
- документированное назначение;
- возможность независимого сопровождения.
Компоненты взаимодействуют исключительно посредством официальных архитектурных контрактов.
Использование внутренних структур других компонентов не допускается.
Модель ответственности
Ответственность архитектурных компонентов распределяется следующим образом.
| Компонент | Основная ответственность |
|---|---|
| Common Layer | Общие архитектурные сущности |
| Runtime Contract | Контракты взаимодействия |
| Runtime Layer | Представление состояния |
| Engine | Анализ одного аспекта рынка |
| Coordinator | Координация аналитических движков |
Пересечение областей ответственности между компонентами не допускается.
Если компонент начинает выполнять функции другого компонента, архитектура должна быть пересмотрена.
Модель зависимостей
Архитектура платформы использует однонаправленную модель зависимостей.
Допустимое направление зависимостей имеет следующий вид.
Coordinator
│
▼
Engine
│
▼
Runtime
│
▼
Common
Обратные зависимости запрещаются.
Компонент не должен зависеть от слоя, расположенного выше него.
Все зависимости должны быть:
- явными;
- объяснимыми;
- документированными;
- архитектурно обоснованными.
Циклические зависимости запрещаются.
Поток данных
Архитектура определяет единый поток движения данных.
Market Data
│
▼
Runtime Context
│
▼
Engine
│
▼
Engine Result
│
▼
Coordinator
│
▼
Market Intelligence Result
Каждый этап обработки использует исключительно официальные архитектурные контракты.
Изменение данных предыдущих этапов обработки не допускается.
Каждый следующий этап получает результат предыдущего исключительно посредством публичного контракта.
Поток управления
Архитектура определяет единый поток управления аналитической системой.
Coordinator
│
▼
Engine
│
▼
Runtime
Coordinator управляет выполнением аналитических компонентов.
Engine не управляют друг другом.
Runtime не управляет Engine.
Common Layer не управляет никакими компонентами.
Управление всегда осуществляется сверху вниз.
Это обеспечивает независимость компонентов и предотвращает появление скрытых архитектурных зависимостей.
Завершение архитектурной модели
Архитектурная модель, определённая настоящей частью, является официальной моделью построения подсистемы Market Intelligence.
Все существующие и будущие архитектурные компоненты обязаны соответствовать данной модели.
Любое изменение архитектурной модели допускается исключительно посредством выпуска новой версии настоящего стандарта.
Part III. Архитектурные ограничения
Настоящая часть определяет обязательные архитектурные ограничения, действующие для всех компонентов подсистемы Market Intelligence.
Архитектурные ограничения конкретизируют применение фундаментальных принципов при проектировании, реализации и развитии платформы.
Нарушение любого из указанных ограничений рассматривается как нарушение архитектурной целостности платформы.
Общие ограничения
Все архитектурные компоненты платформы обязаны соблюдать следующие ограничения.
Не допускается:
- нарушение архитектурной иерархии;
- нарушение границ ответственности компонентов;
- появление скрытых зависимостей;
- использование внутренних структур соседних компонентов;
- дублирование архитектурных сущностей;
- обход официальных архитектурных контрактов.
Архитектурные ограничения являются обязательными независимо от особенностей реализации.
Ограничения Common Layer
Common Layer является фундаментом архитектуры платформы.
Common Layer обязан содержать только архитектурно нейтральные сущности.
Допускается размещение:
- типов;
- моделей;
- перечислений;
- констант;
- общих утилитарных структур;
- диагностических кодов.
Не допускается размещение:
- аналитической логики;
- торговой логики;
- Runtime;
- Engine;
- Coordinator;
- зависимостей от вышележащих архитектурных слоёв.
Common Layer не должен зависеть ни от одного другого слоя платформы.
Ограничения Runtime Layer
Runtime Layer отвечает исключительно за описание состояния аналитической платформы.
Runtime Layer не должен:
- выполнять анализ рынка;
- принимать аналитические решения;
- принимать торговые решения;
- выполнять вычисления Engine;
- управлять последовательностью выполнения компонентов;
- взаимодействовать с пользовательским интерфейсом.
Runtime Layer представляет исключительно состояние платформы.
Изменение Runtime Contract допускается только посредством официального архитектурного процесса.
Ограничения Engine Layer
Engine Layer предназначен исключительно для аналитической обработки рыночной информации.
Каждый Engine обязан реализовывать только один самостоятельный аспект анализа.
Engine не должен:
- открывать или закрывать позиции;
- рассчитывать размер позиции;
- взаимодействовать с биржей;
- изменять Runtime;
- импортировать соседние Engine;
- содержать пользовательский интерфейс;
- управлять другими Engine.
Engine публикует исключительно результат собственного анализа.
Ограничения Coordinator Layer
Coordinator Layer предназначен исключительно для координации аналитических компонентов.
Coordinator может:
- запускать Engine;
- определять порядок вычислений;
- агрегировать результаты;
- формировать итоговый аналитический вывод.
Coordinator не должен:
- реализовывать собственные аналитические алгоритмы;
- выполнять торговые операции;
- изменять внутреннюю реализацию Engine;
- изменять Runtime Contract;
- использовать внутренние структуры Engine.
Coordinator отвечает только за организацию совместной работы аналитических компонентов.
Ограничения взаимодействия компонентов
Все архитектурные компоненты взаимодействуют исключительно посредством официальных контрактов.
Не допускается:
- использование внутренних структур другого компонента;
- обращение к приватной реализации;
- скрытая передача данных;
- зависимость от внутреннего состояния соседнего компонента;
- обход Runtime Contract.
Каждый компонент должен быть способен функционировать независимо при условии соблюдения официальных контрактов взаимодействия.
Запрещённые архитектурные решения
Настоящий стандарт запрещает следующие архитектурные решения.
Не допускается:
- импорт одного Engine другим Engine;
- циклические архитектурные зависимости;
- наличие нескольких источников истины для одной сущности;
- размещение торговой логики внутри Market Intelligence;
- размещение аналитической логики внутри Runtime;
- размещение бизнес-логики в Common Layer;
- нарушение установленной архитектурной иерархии;
- создание компонентов без определённой области ответственности;
- создание компонентов исключительно "на будущее";
- изменение Runtime Contract без архитектурного анализа;
- использование временных архитектурных решений в качестве постоянной архитектуры.
Каждое из перечисленных решений рассматривается как нарушение настоящего стандарта и должно быть устранено до завершения Build.
Завершение архитектурных ограничений
Архитектурные ограничения являются обязательной частью архитектурной модели платформы.
При возникновении противоречия между удобством реализации и установленными архитектурными ограничениями приоритет всегда имеют требования настоящего стандарта.
Архитектурные ограничения сохраняют свою силу независимо от развития платформы, появления новых компонентов или изменения технологий реализации.
Part IV. Архитектурные инварианты
Настоящая часть определяет фундаментальные архитектурные свойства, которые должны сохраняться независимо от развития платформы.
Архитектурный инвариант представляет собой свойство архитектуры, нарушение которого означает нарушение архитектурной модели платформы.
Инварианты сохраняются независимо от:
- количества реализованных Build;
- появления новых Engine;
- изменения Runtime;
- расширения функциональности;
- изменения технологий реализации.
Изменение любого архитектурного инварианта допускается исключительно посредством выпуска новой редакции настоящего стандарта.
Инварианты платформы
Следующие свойства являются обязательными для всей платформы.
Платформа всегда должна сохранять:
- единую архитектурную модель;
- однонаправленные зависимости;
- архитектурную изоляцию компонентов;
- единственный источник истины для каждой сущности;
- единые публичные контракты взаимодействия;
- отсутствие архитектурного дублирования.
Эти свойства являются фундаментальными характеристиками архитектуры Market Intelligence.
Инварианты Common Layer
Common Layer всегда остаётся наиболее стабильным архитектурным слоем платформы.
Common Layer обязан содержать исключительно общие архитектурные сущности.
Инвариантами Common Layer являются:
- отсутствие зависимостей от вышележащих слоёв;
- отсутствие аналитической логики;
- отсутствие торговой логики;
- единое определение базовых моделей;
- единое определение типов;
- единое определение перечислений;
- единое определение констант.
Common Layer всегда остаётся фундаментом всей архитектуры платформы.
Инварианты Runtime Layer
Runtime Layer всегда представляет исключительно состояние платформы.
Runtime никогда не принимает аналитических решений.
Runtime никогда не принимает торговых решений.
Экземпляры Engine всегда создаются исключительно компонентом RuntimeRunner.
RuntimeRegistry хранит только регистрацию Engine и не создаёт экземпляры Engine.
Жизненный цикл экземпляра Engine ограничен одним запуском анализа.
Инвариантами Runtime являются:
- описание состояния;
- официальные Runtime Contract;
- Runtime Events;
- Runtime Models;
- отсутствие аналитической логики;
- отсутствие логики координации.
Runtime остаётся нейтральным архитектурным слоем.
Инварианты Engine Layer
Каждый Engine является самостоятельным аналитическим компонентом.
Каждый Engine обязан:
- иметь единственную область ответственности;
- выполнять один вид анализа;
- использовать официальные архитектурные контракты;
- возвращать единый тип результата;
- быть пригодным для независимого тестирования;
- быть независимым от реализации других Engine.
Engine никогда не содержит:
- торговой логики;
- пользовательского интерфейса;
- управления Coordinator;
- изменения Runtime.
Все Engine остаются независимыми архитектурными компонентами.
Инварианты Coordinator Layer
Coordinator всегда выполняет исключительно координацию аналитических компонентов.
Coordinator обязан:
- управлять последовательностью выполнения Engine;
- агрегировать результаты анализа;
- использовать официальные архитектурные контракты;
- публиковать итоговый аналитический результат.
Coordinator никогда не:
- реализует собственный анализ;
- заменяет Engine;
- содержит торговую логику;
- нарушает архитектурные границы компонентов.
Coordinator остаётся исключительно координирующим компонентом платформы.
Инварианты архитектурных контрактов
Все архитектурные взаимодействия осуществляются только посредством официальных контрактов.
Инвариантами контрактной модели являются:
- единый Runtime Contract;
- единые модели обмена данными;
- отсутствие скрытых контрактов;
- отсутствие прямого использования внутренней реализации компонентов;
- совместимость контрактов между архитектурными слоями.
Архитектурные контракты являются единственным допустимым способом взаимодействия компонентов.
Инварианты развития архитектуры
Развитие платформы должно сохранять архитектурную целостность.
Каждый новый компонент обязан:
- соответствовать архитектурной модели;
- соблюдать архитектурные ограничения;
- использовать существующие контракты либо официально расширять их;
- уменьшать либо не увеличивать архитектурную сложность платформы;
- сохранять возможность дальнейшего масштабирования.
Расширение функциональности не должно нарушать фундаментальные свойства архитектуры.
Архитектурная неизменяемость инвариантов
Архитектурные инварианты определяют фундаментальную идентичность платформы.
Изменение инвариантов означает изменение самой архитектурной модели Market Intelligence.
По этой причине инварианты могут быть изменены исключительно посредством официального пересмотра настоящего стандарта.
Любое архитектурное решение, противоречащее одному или нескольким инвариантам, считается несовместимым с архитектурой платформы.
Part V. Эволюция архитектуры
Настоящая часть определяет правила долгосрочного развития архитектуры подсистемы Market Intelligence.
Архитектура платформы рассматривается как непрерывно развивающаяся система.
Развитие архитектуры допускается только при сохранении фундаментальных принципов, архитектурных ограничений и архитектурных инвариантов, определённых настоящим стандартом.
Цель эволюции архитектуры заключается в последовательном расширении функциональности платформы без увеличения архитектурной сложности.
Общие принципы развития
Архитектура развивается посредством последовательного расширения существующей модели.
Каждый новый архитектурный компонент должен естественным образом интегрироваться в существующую архитектуру.
При развитии платформы должны сохраняться:
- архитектурная целостность;
- архитектурная согласованность;
- понятность структуры;
- независимость компонентов;
- стабильность архитектурных контрактов.
Изменение архитектуры не должно ухудшать её сопровождаемость.
Расширение архитектуры
Расширение архитектуры является предпочтительным способом развития платформы.
Новые возможности должны реализовываться посредством добавления новых компонентов, а не изменения фундаментальной структуры существующих.
При расширении архитектуры должны соблюдаться следующие требования:
- новый компонент имеет единственную область ответственности;
- место компонента в архитектуре определено заранее;
- архитектурные зависимости соответствуют архитектурной модели;
- используются существующие архитектурные контракты либо их официальное расширение;
- отсутствует дублирование существующей функциональности.
Расширение архитектуры не должно нарушать существующие архитектурные инварианты.
Изменение архитектуры
Изменение существующей архитектуры допускается исключительно при наличии подтверждённой архитектурной необходимости.
К таким случаям относятся:
- устранение архитектурного дефекта;
- упрощение архитектурной модели;
- повышение сопровождаемости;
- повышение масштабируемости;
- устранение архитектурного долга;
- развитие архитектурных контрактов.
Изменение архитектуры не должно выполняться исключительно ради изменения структуры или используемых технологий.
Архитектурный рефакторинг
Архитектурный рефакторинг рассматривается как один из основных механизмов развития платформы.
Цель архитектурного рефакторинга заключается в улучшении архитектуры без изменения её фундаментальной модели.
Архитектурный рефакторинг должен:
- уменьшать связанность компонентов;
- повышать понятность архитектуры;
- устранять архитектурное дублирование;
- упрощать развитие платформы;
- улучшать распределение ответственности.
После завершения рефакторинга архитектура должна стать проще для понимания и сопровождения.
Развитие архитектурных контрактов
Архитектурные контракты могут развиваться одновременно с развитием платформы.
Любое изменение архитектурного контракта должно:
- сохранять архитектурную целостность;
- быть совместимым с существующей архитектурой либо сопровождаться официальным изменением стандарта;
- иметь архитектурное обоснование;
- быть отражено в инженерной документации.
Контракты являются частью фундаментальной архитектуры платформы и требуют особой осторожности при изменении.
Архитектурная стабильность
Архитектура платформы должна сохранять устойчивость независимо от количества реализованных Build.
При развитии платформы наиболее стабильными остаются:
- Common Layer;
- Runtime Contract;
- Runtime Layer;
- архитектурные модели.
Наиболее изменяемыми являются:
- аналитические Engine;
- Coordinator;
- прикладные сценарии использования.
Чем ближе архитектурный компонент расположен к фундаменту платформы, тем более обоснованными должны быть его изменения.
Критерии качественной эволюции
Архитектурное развитие считается успешным только при одновременном выполнении следующих условий:
- функциональные возможности платформы расширяются;
- архитектурная сложность не увеличивается;
- сопровождаемость улучшается либо сохраняется;
- повторное использование компонентов возрастает;
- архитектурные инварианты сохраняются.
Если развитие функциональности сопровождается деградацией архитектуры, принятое решение должно быть пересмотрено.
Непрерывность архитектурного развития
Развитие архитектуры рассматривается как непрерывный процесс.
Каждый завершённый Build должен оставлять платформу в состоянии, при котором:
- архитектура остаётся целостной;
- все архитектурные ограничения соблюдены;
- инварианты сохраняются;
- архитектурные контракты актуальны;
- следующий этап развития может быть начат без пересмотра фундаментальной архитектуры.
Архитектурная эволюция рассматривается как последовательность небольших согласованных изменений, каждое из которых делает платформу функционально богаче и архитектурно зрелее.
Part VI. Архитектурная согласованность
Настоящая часть определяет критерии, которым должна соответствовать архитектура подсистемы Market Intelligence независимо от этапа её развития.
Архитектурная согласованность рассматривается как обязательное условие долгосрочной стабильности платформы.
Любое архитектурное решение должно способствовать повышению согласованности архитектуры либо, как минимум, не ухудшать её.
Архитектурная целостность
Архитектура платформы должна восприниматься как единая система.
Все архитектурные компоненты обязаны естественным образом дополнять друг друга.
При развитии платформы должны сохраняться:
- единая архитектурная модель;
- единая терминология;
- единые архитектурные контракты;
- единая система ответственности;
- единая модель взаимодействия компонентов.
Архитектурная целостность является обязательным свойством платформы.
Архитектурная простота
Архитектура должна оставаться максимально простой при сохранении необходимой функциональности.
Архитектурная простота достигается посредством:
- минимального количества зависимостей;
- отсутствия скрытого поведения;
- отсутствия необоснованных уровней абстракции;
- понятного распределения ответственности;
- использования единых архитектурных решений.
Простота архитектуры рассматривается как долгосрочная инженерная ценность.
Архитектурная сопровождаемость
Архитектура должна обеспечивать возможность безопасного сопровождения платформы на протяжении всего жизненного цикла.
Архитектурная сопровождаемость предполагает:
- локальность изменений;
- минимизацию влияния изменений на соседние компоненты;
- понятную структуру каталогов;
- очевидные архитектурные зависимости;
- наличие актуальной инженерной документации.
Изменение одного компонента не должно требовать массового изменения остальных компонентов платформы.
Архитектурная масштабируемость
Архитектура должна поддерживать последовательное расширение платформы.
Добавление новых компонентов не должно требовать изменения фундаментальной архитектурной модели.
Архитектурная масштабируемость достигается посредством:
- независимости компонентов;
- использования официальных контрактов;
- изоляции архитектурных слоёв;
- отсутствия скрытых зависимостей;
- последовательного распределения ответственности.
Архитектура должна поддерживать возможность роста платформы без ухудшения её качества.
Архитектурная объяснимость
Каждый архитектурный компонент должен иметь понятное место в общей архитектуре платформы.
Для любого компонента должна существовать возможность ответить на следующие вопросы:
- зачем существует данный компонент;
- почему он расположен именно в этом архитектурном слое;
- почему его ответственность определена именно таким образом;
- каким образом он взаимодействует с другими компонентами;
- почему архитектура выбрана именно в таком виде.
Архитектура считается зрелой только в том случае, если её структура объяснима без обращения к деталям реализации.
Архитектурная устойчивость
Архитектура должна сохранять свои фундаментальные свойства независимо от количества реализованных Build.
Новые функциональные возможности не должны:
- нарушать архитектурные принципы;
- изменять фундаментальную архитектурную модель;
- разрушать архитектурные инварианты;
- увеличивать связанность компонентов;
- усложнять архитектуру платформы.
Архитектурная устойчивость является обязательным условием долгосрочного развития проекта.
Архитектурная зрелость
Архитектура платформы считается зрелой при одновременном выполнении следующих условий:
- соблюдаются фундаментальные архитектурные принципы;
- соблюдаются архитектурные ограничения;
- сохраняются архитектурные инварианты;
- архитектура допускает безопасное расширение;
- отсутствуют архитектурные противоречия;
- отсутствует архитектурный долг;
- архитектурная документация соответствует текущему состоянию платформы.
Архитектурная зрелость является результатом последовательного развития платформы и соблюдения требований настоящего стандарта.
Part VII. Заключительные положения
Настоящая часть завершает настоящий архитектурный стандарт и определяет порядок его применения, развития и сопровождения.
Все положения настоящего документа являются обязательными для архитектуры подсистемы Market Intelligence проекта Dzentra.
Соответствие настоящему стандарту
Все архитектурные компоненты платформы обязаны соответствовать требованиям настоящего стандарта.
Соответствие подтверждается посредством архитектурных проверок, предусмотренных документом Development Process.
Архитектурное решение считается соответствующим настоящему стандарту только при одновременном выполнении следующих условий:
- соблюдены фундаментальные архитектурные принципы;
- соблюдены архитектурные ограничения;
- сохранены архитектурные инварианты;
- обеспечена архитектурная согласованность;
- архитектурная документация соответствует текущему состоянию платформы.
Несоответствие любому обязательному требованию настоящего стандарта рассматривается как архитектурный дефект.
Развитие стандарта
Настоящий документ рассматривается как долгосрочный архитектурный стандарт.
Развитие настоящего стандарта допускается только посредством выпуска новой версии документа.
Каждая новая редакция должна:
- сохранять фундаментальную архитектурную модель платформы либо официально фиксировать её изменение;
- устранять неоднозначности;
- повышать согласованность архитектурных требований;
- улучшать сопровождаемость архитектуры;
- уменьшать сложность архитектурной модели.
Изменение настоящего стандарта не должно приводить к ухудшению архитектурного качества платформы.
Приоритет настоящего стандарта
Настоящий документ является официальным источником фундаментальных архитектурных принципов подсистемы Market Intelligence.
При возникновении противоречий между настоящим документом и другими архитектурными материалами приоритет имеют требования настоящего стандарта.
Документы более низкого уровня должны развивать положения настоящего стандарта и не могут изменять его фундаментальные требования.
Архитектурная аксиома Dzentra
Фундаментальной архитектурной аксиомой платформы Dzentra является следующее утверждение.
Каждый новый архитектурный компонент обязан делать платформу функционально богаче, но архитектурно проще.
Данная аксиома является итоговым выражением всех принципов настоящего стандарта.
Любое архитектурное решение должно оцениваться прежде всего с точки зрения соответствия этой аксиоме.
Если после реализации нового компонента архитектура становится менее понятной, менее согласованной или менее сопровождаемой, принятое решение должно быть пересмотрено независимо от достигнутой функциональности.
Заключительные положения
Настоящий документ определяет фундаментальные архитектурные законы подсистемы Market Intelligence проекта Dzentra.
Все архитектурные решения, независимо от времени их принятия, обязаны соответствовать требованиям настоящего стандарта.
Фундаментальные архитектурные принципы являются основой:
- Development Process;
- Runtime Contract;
- Architecture Decision Records;
- Engineering Reviews;
- Build Documentation;
- всех последующих архитектурных решений платформы.
Настоящий документ остаётся единым официальным источником фундаментальных архитектурных требований подсистемы Market Intelligence.
Приложения
Приложения являются справочной частью настоящего стандарта.
Они не изменяют обязательные требования документа, но используются для унификации архитектурной практики проекта.
В последующих версиях стандарта могут быть подготовлены отдельные приложения.
- Приложение А. Архитектурный глоссарий.
- Приложение Б. Каталог архитектурных инвариантов.
- Приложение В. Каталог архитектурных диаграмм.
- Приложение Г. Архитектурные шаблоны компонентов.
- Приложение Д. Примеры допустимых архитектурных зависимостей.
- Приложение Е. Примеры недопустимых архитектурных решений.