Улучшаемые навыки
Архитектурные стили
DDD
Доменная логика
Unit of Work, Saga
Распределённые транзакции
Кеширование
Circuit Breaker
Отказоустойчивость
Actor Model
Паттерны проектирования
Микросервисы
Инструменты
Miro
Draw io
Чему вы научитесь
01
Выбирать архитектурный стиль для системы и её компонентов и обосновывать выбор бизнес-целями
02
Планировать эволюцию системы, включая миграцию между стилями
03
Выбирать способ организации доменной логики, выделять агрегаты и границы контекстов
04
Проектировать доступ к данным: маппинг, согласованное сохранение, ключи и иерархии
05
Применять кеширование и пулинг с учётом их ограничений
06
Проектировать взаимодействие сервисов через сообщения и распределённые транзакции
07
Повышать устойчивость системы в эксплуатации с помощью шаблонов стабильности
Программа курса
01
Архитектура приложения и бизнес-цели
Задачи и артефакты архитектуры
Архитектурное и детальное (функциональное) проектирование: в чём разница (тема упоминается в отзывах)
Принципы построения архитектуры и их связь с бизнес-целями
Каталоги шаблонов проектирования: обзор и как ими пользоваться
Стиль и шаблон: в чём разница и каким целям служат
8 базовых стилей и их вариации: предпосылки появления, устройство, сильные и слабые стороны [сверить: какие именно — например, слоистый, микроядро, конвейер, сервисный, событийный, space-based, SOA, микросервисы]
Выбор и обоснование стиля под бизнес-цели
Миграция между стилями по мере роста потребностей бизнеса
03
Базовые шаблоны внутренней логики модулей
Шаблоны, повышающие уровень абстракции внутренней логики: Measurement, Range, Specification, NullObject и др.
Инкапсуляция логики: меньше ошибок, полнее используются возможности ООП
04
Шаблоны доменной логики
Три подхода к организации доменной логики и выбор по роли модуля в системе [сверить: Transaction Script, Table Module, Domain Model]
Active Record; Rich и Anemic Domain Model
Тактический дизайн: агрегаты и первичные границы ограниченных контекстов; введение в стратегический дизайн
Actor Model для сложной доменной логики
Организация доступа к источникам данных и маппинга под контекст; миграция данных между версиями
Unit of Work: согласованное сохранение разнотипных данных, реализация для реляционных и нереляционных хранилищ, применение в сложных доменных процессах
Хранение сложных иерархий: сравнение вариантов структур [сверить: Single Table / Class Table / Concrete Table Inheritance]
Стратегии генерации ключей: форматы, плюсы и минусы в зависимости от окружения
Кеширование и пулинг ресурсов: когда применять, компромиссы
Стратегии кеширования [сверить: cache-aside, read-through, write-through, write-behind; инвалидация]
Локальный и распределённый кеш: особенности реализации
07
Коммуникация между сервисами
Три класса сообщений: правила проектирования и применения [сверить: команда, событие, документ]
Лишняя связность и зависимости сервисов при неверном выборе класса сообщения
Распределённые транзакции и шаблон Saga: назначение, сложности [сверить: хореография и оркестрация]
Надёжная публикация сообщений по итогам сложной транзакции [сверить: Transactional Outbox]
Типовые причины отказов в продуктивной среде: недоступность сервисов и хранилищ, каскадные отказы, ошибки самих разработчиков
Антипаттерны стабильности и как минимизировать их последствия
Шаблоны стабильности: Circuit Breaker [сверить остальные: Timeout, Bulkhead, Retry с backoff, Fail Fast]
09
Итого на курс 24 часа: теория 16 ч (67%), практика 8 ч (33%)
Для кого
Архитектор ПО
Разработчик
Руководитель группы\Тимлид
Техлид
Системный аналитик
Предварительная подготовка
Опыт участия в проектах по разработке программного обеспечения или понимание процесса разработки.
Базовое знание UML (например, курс REQ-001) или опыт работы с требованиями.
Опыт продуктовой разработки в качестве: - разработчика ( 4 года мин), - аналитика (5-6 лет)
Расписание курсов
Курс проводят
О тренере
Андрей преподает с 2013 года. Работает в основном с темами, связанными с архитектурой ПО, требованиями, а также разработкой и тестированием на C#. За свою карьеру Андрей успел поработать в разных ролях и компаниях — от Intel и Volvo до Luxoft. Делал как продуктовую разработку, так и проекты на заказ, занимался консалтингом и участвовал в тендерах на разработку систем.
Больше всего Андрею интересны задачи, где всё начинается с неопределённости. Когда нет чёткого ТЗ, когда многое в тумане — это возможность применить весь накопленный опыт. Больше всего Андрею нравится превращать разрозненные идеи и неполные требования в четкую архитектуру и конкретные шаги.
Андрей работает в индустрии уже более 20 лет. Глубоко понимает, как устроены системы, умеет находить решения, которые действительно работают — не на бумаге, а в проде.
В 2020 году выиграл международный конкурс от O’Reilly, после чего смог повлиять на то, как в компаниях начали документировать архитектурные решения. А в 2025-м опубликовал перевод книги Мартина Фаулера «Аналитические шаблоны» с дополнением из личного опыта — она про то, как видеть системы глубже и проектировать осмысленно. Эта книга действительно меняет способ мышления о системах.