Domain-Driven Design w praktyce
Opis
Tworzenie złożonych systemów wymaga uporządkowanego podejścia zarówno w sferze technicznej jak i sferze modelów dziedzinowych. Domain-Driven Design przychodzi z pomocą w postaci całego zestawu wzorców strategicznych i taktycznych, dzięki którym zespoły mogą w zarządzalny sposób strukturyzować system w zbalansowane moduły a następnie w bloki budujące. DDD to sprawdzone podejście, które umocniło swoją pozycje w świecie coraz powszechniejszych ostatnio Microservices jako jedna z głównych praktyk projektowych.
Wymagane umiejętności
- Uczestnik ma za sobą minimum 2-letnie doświadczenie realizacji systemów informatycznych.
- Uczestnik zna zagadnienia projektowania i programowania obiektowego na poziomie średniozaawansowanym.
Szkolenie zamknięte jest prowadzone głównie w językach Java i C#. Po wcześniejszych ustaleniach szkolenie może być zrealizowane w innych językach np. PHP, C++, Python.
Podstawowy program
Moduł. 1
Wprowadzenie do Domain-Driven Design
Moduł. 2
Destylacja dziedziny
Moduł. 4
Architektura aplikacji
Moduł. 5
Komunikacja pomiędzy Bounded Contextami (BC)
Moduł. 6
Wzorce taktyczne DDD
Moduł. 9
Command i Query w praktyce
Szczegółowy program
Moduł. 1
Wprowadzenie do Domain-Driven Design
- Główne wyzwania w tworzeniu oprogramowania
- Anemiczne modele
- Praktyki i zasady DDD
- Czy nie jest DDD
- Język dziedzinowy
- Ubiquitous Language
- Osadzenie DDD w różnych stylach architektonicznych
- DDD a Microservices
- Wyzwania stojące przed zespołem rozpoczynającym prace z DDD
- Dobre praktyki związane z wdrażaniem DDD
Moduł. 2
Destylacja dziedziny
- Klaryfikacja wiedzy o dziedzinie i współpraca z ekspertem dziedzinowym
- Wykorzystywanie istniejących modeli
- Jak uchwycić esencję problemu?
- Core Domain
- Poddziedziny i ich wpływ na kształt systemu
- Czy każda część systemu musi być dobrze zaprojektowana?
Moduł. 3
Model dziedziny
- Czym jest model dziedziny?
- Model-Driven Design
- Rola Ubiquitous Language w analizie
- Jak tworzyć dobre modele?
- Założenia implementacyjne związane z warstwą dziedzinową
- Wzorce warstwy dziedzinowej
- Czy jeden model to dobry kierunek?
- Używanie Bounded Contextu
- Strategie implementacyjne związane z Bounded Contextami
- Mapa rzeczywistości
- Zależności pomiędzy Bounded Contextami
- Efektywne wykorzystanie Context Map
Moduł. 4
Architektura aplikacji
- Architektura aplikacji
- Usługi aplikacyjne
- Klienty aplikacji
- UI a DDD
Moduł. 5
Komunikacja pomiędzy Bounded Contextami (BC)
- Strategie integracji BC
- Strategie integracji BC w środowisku rozproszonym
- SOA oraz reaktywne DDD
- Integracja poprzez messaging
- Integracja poprzez HTTP REST i RPC
Moduł. 6
Wzorce taktyczne DDD
- Wzorce ułatwiające modelowanie dziedziny
- Wzorce związane z cyklem życia
- Value Objects
- Entities
- Domain Services
- Domain Events
- Agregaty
- Fabryki
- Repozytoria
- Moduły
- Transakcje w DDD
Moduł. 7
Event Sourcing
- Wady przechowywania stanu w postaci zrzutu (Snapshot)
- Stan jako strumień zdarzeń
- Agregaty oparte o zdarzenia
- Tworzenie Event Store
- CQRS a Event Sourcing
- Wady i zalety Event Sourcing
Moduł. 8
CQRS
- Kiedy jeden model to za mało
- Model Command
- Model Query
- Strategie implementacyjne
Moduł. 9
Command i Query w praktyce
- Odróżnianie logiki aplikacyjnej i dziedzinowej
- Wzorce usług aplikacyjnych
- Testowanie usług aplikacyjnych
- Raportowanie w obszarze Bounded Contextu
- Raportowanie dla wielu Bounded Contextów