Этот курс ориентирован на изучение методологии разработки программного обеспечения, которая фокусируется на сложных бизнес-доменах и их точном отражении в коде. Программа курса помогает разработчикам и архитекторам создавать гибкие, поддерживаемые и масштабируемые системы, которые соответствуют потребностям бизнеса.
Курс "Предметно-ориентированное проектирование" предназначен для тех, кто хочет углубить свои знания в проектировании сложных систем и научиться создавать программное обеспечение, которое точно соответствует бизнес-требованиям.
Изучение основ DDD. Научиться понимать ключевые концепции, такие как домен, ограниченный контекст (Bounded Context), универсальный язык (Ubiquitous Language), сущности (Entities), объекты-значения (Value Objects), агрегаты (Aggregates) и доменные события (Domain Events).
Практическое применение DDD. Научиться решать реальные задач, связанные с проектированием и разработкой сложных систем.
• Разработчики программного обеспечения
• Архитекторы ПО
• Аналитики и проектировщики: специалисты, работающие с бизнес-требованиями и хотят научиться лучше переводить их в технические решения
• Тимлиды и технические руководители: специалисты, управляющие командами разработки, кто хочет внедрить DDD в свои проекты.
• Проектировать сложные системы. Создавать модели, которые точно отражают бизнес-логику и требования.
• Применять DDD-подходы. Использовать ограниченные контексты, универсальный язык, агрегаты и другие паттерны DDD.
• Работать с архитектурой: проектировать системы с использованием CQRS, Event Sourcing и микросервисов.
• Управлять сложностью. Декомпозировать большие системы на более мелкие и управляемые части.
• Эффективно взаимодействовать с заинтересованными сторонами проекта, используя универсальный язык.
• Принимать архитектурные решения, выбирать подходящие подходы и инструменты для решения задач в зависимости от контекста.
• Базовые знания программирования: понимание основ ООП (объектно-ориентированного программирования) и умение писать код на одном из языков (например, C#, Java, Python).
• Опыт разработки ПО: понимание жизненного цикла разработки программного обеспечения и работы с базами данных.
• Знание основ проектирования: базовое понимание паттернов проектирования (например, MVC, Repository, Factory и т.д.).
• Понимание бизнес-процессов: умение анализировать и работать с требованиями заказчиков.
• Базовые знания архитектуры ПО. Понимание различий между монолитной и микросервисной архитектурой.
После прохождения данного курса выпускники смогут эффективно применять DDD-подходы в реальных проектах, управлять сложностью систем и улучшать коммуникацию между техническими и бизнес-командами.
Модуль 1. Стратегическое проектирование
Высокоуровневое проектирование системы, которое помогает понять, как организовать сложную предметную область и разделить ее на управляемые части.
Разделение предметной области на поддомены
Методы анализа предметной области и ее декомпозиции на поддомены.
• Что такое поддомены (Core Domain, Supporting Subdomain, Generic Subdomain).
• Как идентифицировать ключевые поддомены, которые приносят наибольшую ценность бизнесу.
• Примеры разделения предметной области на поддомены.
Контексты и их границы
Концепция ограниченных контекстов (Bounded Context) и их роли в проектировании.
• Что такое ограниченный контекст и как он помогает управлять сложностью.
• Как определить границы контекстов.
• Примеры ограниченных контекстов в реальных проектах.
Карта контекстов
Техники визуализации взаимодействия между ограниченными контекстами.
• Что такое карта контекстов (Context Map).
• Типы взаимоотношений между контекстами (Partnership, Shared Kernel, Customer-Supplier и др.).
• Практические примеры создания карт контекстов.
Модуль 2. Тактическое проектирование
Низкоуровневое проектирование, которое помогает реализовать модели предметной области в коде.
Модели предметных областей
Методы создания точных и эффективных моделей предметной области.
• Что такое модель предметной области.
• Как использовать универсальный язык (Ubiquitous Language) для создания моделей.
• Примеры моделей предметной области.
Агрегаты и сущности
Концепции агрегатов (Aggregates) и сущностей (Entities).
• Что такое сущности и как они отличаются от объектов-значений.
• Что такое агрегаты и как они помогают управлять целостностью данных.
• Примеры проектирования агрегатов и сущностей.
Объекты-значения
Концепции объектов-значений (Value Objects).
• Что такое объекты-значения и как они отличаются от сущностей.
• Примеры использования объектов-значений в моделях.
Репозитории и фабрики
Роли репозиториев (Repositories) и фабрик (Factories) в DDD.
• Что такое репозитории и как они используются для управления агрегатами.
• Что такое фабрики и как они помогают создавать сложные объекты.
• Примеры реализации репозиториев и фабрик.
Модуль 3. Реализация на практике
Применение DDD в реальных проектах и закреплению полученных знаний через практические задания.
Примеры использования DDD в реальных проектах
• Кейсы применения DDD в реальных проектах.
• Примеры успешного применения DDD.
Разбор ошибок и проблем, возникающих при внедрении DDD.
Практические задания для закрепления материала
• Задания по проектированию моделей предметной области.
• Задания по созданию ограниченных контекстов и карт контекстов.
• Задания по реализации агрегатов, сущностей и объектов-значений.
Модуль 4. Интеграция систем
Методы интеграции различных частей системы и управления взаимодействием между ними.
Антипаттерны интеграции
Изучение типичных ошибок при интеграции систем.
• Что такое антипаттерны интеграции.
• Примеры антипаттернов и их последствия.
Использование событий и сообщений
Понимание роли событий (Domain Events) и сообщений в интеграции систем.
• Что такое доменные события.
• Как использовать события для интеграции систем.
• Примеры реализации событий.
REST и CQRS
Изучение методов интеграции через REST и CQRS (Command Query Responsibility Segregation).
• Что такое REST и как его использовать для интеграции.
• Что такое CQRS и как он помогает разделять команды и запросы.
• Примеры использования REST и CQRS.
Модуль 5. Тестирование и рефакторинг
Методы тестирования и улучшения кода, созданного с использованием DDD.
Тестирование моделей предметной области
Изучение методов тестирования моделей предметной области.
• Как тестировать сущности, объекты-значения и агрегаты.
• Примеры написания тестов для моделей.
Рефакторинг кода с использованием DDD
Понимание методов улучшения кода с использованием DDD.
• Как проводить рефакторинг кода для улучшения его соответствия DDD-принципам.
• Примеры рефакторинга.
Раздел не найден.