5.5 KiB
Decision 001 — Architecture First
Статус
Accepted
Дата принятия
Принято во время начала проектирования Stage-08.2 Engine Runtime Contract.
Контекст
Проект Dzentra развивается как долгосрочная автономная торговая платформа.
На ранних этапах развития стало очевидно, что традиционный подход:
Идея
↓
Написание кода
↓
Попытка встроить код в архитектуру
со временем приводит к накоплению технического долга, усложнению зависимостей и постепенной деградации структуры проекта.
Для платформы, которая должна развиваться на протяжении многих лет, такой подход признан неприемлемым.
Проблема
При разработке без предварительного архитектурного проектирования обычно возникают следующие последствия:
- смешивание зон ответственности компонентов;
- появление временных решений, остающихся в проекте навсегда;
- дублирование логики;
- циклические зависимости;
- усложнение сопровождения;
- постоянный рефакторинг уже написанного кода.
Каждое новое изменение становится дороже предыдущего.
Рассмотренные варианты
Вариант 1
Сначала писать код, затем при необходимости выполнять рефакторинг.
Преимущества
- быстрый старт реализации;
- минимальные затраты на начальном этапе.
Недостатки
- рост технического долга;
- потеря целостности архитектуры;
- постоянные изменения уже работающего кода;
- усложнение тестирования;
- снижение предсказуемости развития проекта.
Вариант 2
Сначала проектировать архитектуру, затем реализовывать код.
Преимущества
- понятные зоны ответственности;
- отсутствие случайных зависимостей;
- возможность масштабирования;
- предсказуемое развитие платформы;
- уменьшение объёма последующего рефакторинга;
- единый стиль разработки.
Недостатки
- увеличение времени подготовки перед реализацией;
- необходимость поддерживать архитектурную документацию в актуальном состоянии.
Принятое решение
Перед началом реализации любого нового компонента обязательно выполняется архитектурное проектирование.
Минимальный цикл разработки выглядит следующим образом:
Идея
↓
Architecture Design
↓
Architecture Review
↓
Implementation
↓
Compile Check
↓
Domain Review
↓
Documentation Update
↓
Build Closed
Переход к написанию кода допускается только после определения места компонента в общей архитектуре платформы.
Причины принятия решения
Использование подхода Architecture First позволяет:
- сохранять целостность архитектуры;
- уменьшать технический долг;
- заранее определять ответственность компонентов;
- предотвращать появление случайных зависимостей;
- упрощать сопровождение проекта;
- обеспечивать предсказуемое развитие платформы.
Последствия
После принятия данного решения:
- архитектура всегда проектируется раньше реализации;
- новый код не появляется без заранее определённой роли;
- каждый компонент имеет понятную область ответственности;
- архитектурные решения фиксируются документально;
- развитие платформы становится последовательным и контролируемым.
Связанные документы
architecture_principles.mdruntime_contract.mddevelopment_process.mdbuild_history.md
История изменений
| Версия | Изменение |
|---|---|
| 1.0 | Первое принятие архитектурного решения. |