Раздел описывает принципы организации программного обеспечения: от структуры отдельных функций и модулей до архитектуры приложений и взаимодействия между системами.

Материалы раздела рассматривают способы управления сложностью, разделения ответственности, определения границ компонентов и принятия технических решений, позволяющих системе оставаться понятной, изменяемой, тестируемой и устойчивой к развитию требований.

Основные направления

  • Качество кода и управление сложностью — понятность, именование, локальность изменений, размер компонентов, побочные эффекты, инварианты и снижение случайной сложности.
  • Модульность и зависимости — связность, зацепление, инкапсуляция, абстракции, контракты, композиция, внедрение и направление зависимостей.
  • Принципы проектирования — SOLID, DRY, KISS, YAGNI, Law of Demeter, command-query separation и другие ориентиры для изменяемого дизайна.
  • Объектное и предметное моделирование — сущности, объекты-значения, агрегаты, доменные сервисы, события, ограниченные контексты и единый язык.
  • Шаблоны проектирования — порождающие, структурные и поведенческие шаблоны, enterprise patterns и анализ условий их применимости.
  • Архитектурные стили и структуры — монолит, модульный монолит, слоистая, компонентная, клиент-серверная, событийная и сервисная архитектуры.
  • Архитектурные границы и интеграции — порты и адаптеры, API, сообщения, anti-corruption layer, разделение систем и управление изменениями контрактов.
  • Архитектурные решения и эволюция системы — требования к качеству, компромиссы, ADR, технический долг, рефакторинг, миграции и постепенное изменение архитектуры.

Основные вопросы раздела

Материалы раздела должны помогать отвечать на следующие вопросы:

  • Как разделить систему на понятные и независимо изменяемые части?
  • Где провести границы модулей, компонентов и предметных контекстов?
  • Как уменьшить связность и сохранить высокую смысловую цельность компонентов?
  • Какие зависимости должны быть направлены к стабильным абстракциям?
  • Когда композиция предпочтительнее наследования?
  • Какие инварианты и контракты должна защищать модель?
  • Когда применение шаблона упрощает решение, а когда добавляет лишнюю сложность?
  • Как выбрать архитектурный стиль с учётом требований и ограничений?
  • Как отделить бизнес-правила от транспорта, хранения и инфраструктуры?
  • Как управлять совместимостью интерфейсов и интеграций?
  • Как фиксировать архитектурные решения и их компромиссы?
  • Как развивать существующую систему без опасной полной переработки?

Границы раздела

Раздел посвящён структуре программного обеспечения, моделированию предметной области и архитектурным решениям.

Синтаксис, системы типов и механизмы выполнения конкретных языков рассматриваются в разделе программирования и сред выполнения. Пользовательские и бизнес-требования относятся к разделу пользователя и бизнеса. Процессы постановки задач, рецензирования и документирования решений рассматриваются в разделе инженерного процесса. Масштабирование и согласованность между узлами относятся к разделу распределённых систем и надёжности.

в этой папке 0 элементов