Translated from https://kalele.io/live-training/iddd/
Intensywne, 3-dniowe, warsztaty IDDD autorstwa Vaughna Vernona, prowadzone przez Tomasz Jaskułę
Wyjdź poza teorię DDD i zobacz jak Twój zespół może w pełni wykorzystać DDD do realizacji Twoich strategicznych inicjatyw w sposób, który pomoże Twojej firmie zdobyć przewagę konkurencyjną. W trakcie warsztatu kładziemy nacisk na tworzenie oprogramowania zgodnie z najlepszymi praktykami (Software Craftmanship) oraz odzwierciedlenie modelu domenowego w kodzie źródłowym zgodnie z metodami Agile. Pokazujemy przewagę tego podejścia nad rozwiązywaniem realnych problemów biznesowych używając wyłącznie technologii. Szkolenie przeznaczone jest dla zaawansowanych i średnio zaawansowanych programistów oraz architektów zainteresowanych tworzeniem oprogramowania i nauką modelowania domen przy użyciu Domain-Driven Design (DDD). W ramach warsztatu nauczymy niezbędnych podstaw, które wykorzystasz, jeśli Twoja organizacja rozważa implementację Microservis-ów. Nabędziesz praktycznych umiejętności, gdyż zachęcamy uczestników do udziału w ćwiczeniach warsztatowych i implementacji wielu współdziałających ze sobą Microservis-ów oraz DDD Bounded Context-ów sterowanych zdarzeniami. Nauczysz się stosować taktyczne i strategiczne wzorce projektowe. Domena nad którą będziesz pracować, to Peer-to-Peer Economy, pokazująca handel elektroniczny w zupełnie nowym świetle.
Celem pierwszego dnia jest wytworzenie mentalności DDD, która uwolni umysł od myślenia opartego na strukturach danych. Jest to konieczne, aby uchwycić cel rozwoju Ubiquitous Language w danym Bounded Context-cie, co jest znakiem rozpoznawczym DDD. Od tego momentu będziesz gotowy do wykorzystania projektowania strategicznego przy użyciu Subdomen, Bounded Context-ów i Context Maps. Następnie przejdziemy do architektury, przygotowując Cię do korzystania z architektury Portów i Adapterów (Ports & Adapters), architektur sterowanych zdarzeniami (EDA - Event Driven Architecture) i innych narzędzi architektonicznych, których nauczysz się podczas ćwiczeń z modelowania nowych Bounded Context-ów. Uczestnicy uczą się, jak rozwijać język współdzielony (Ubiquitous Language) w ramach Bounded Context-u, używając zarówno Specification By Example, jak i EventStorming-u oraz poznają sposób prawidłowego wdrażania oprogramowania za pomocą Impact Mappingu. Zespoły uczestników będą korzystać z tych narzędzi, aby osiągnąć wspólne zrozumienie głównej domeny (Core Domain) oraz domen pomocniczych (Subdomains). Każdy zespół przedstawi ogólną wizję systemu (big picture) oraz szczegółowy projekt techniczny (design level), które będziemy dyskutować przed rozpoczęciem implementacji w Dniu 2.
Na tym etapie chodzi o zrozumienie istoty DDD, wytworzenie odpowiedniej mentalności koniecznej do wydajnego modelowania oprogramowania. Będziesz pracował nad językiem współdzielonym (Ubiquitous Language) swojego projektu wykorzystując Specification By Example oraz testy akceptacyjne. Stanowi to podstawę do dalszego rozwoju używając DDD.
Poznaj podstawowe pojęcia modelowania strategicznego DDD i naucz się je wykorzystywać. Dowiedz się, dlaczego projektowanie strategiczne jest tak ważne. Rozwiń umiejętność określania, kiedy modele domen są poprawnie złożone a kiedy wymagają bardziej rygorystycznego projektowania.
Dowiedz się, jak integrować Twój system z innymi podsystemami za pomocą DDD i prostych technik projektowania. Mapy kontekstowe (Context Maps) to nie tylko rysunki. Naucz się korzystać z nich do komunikacji między zespołami, myślenia projektowego, uczenia się, planowania i jako narzędzia integracyjnego.
Zobacz, jak różne style i wzorce architektury można wykorzystać do wsparcia projektów DDD. Przyjrzymy się: Warstwom; Zasadzie inwersji zależności (Dependency Injection); Hexagonal Architecture; Microservices; REST; Sterowaniu zdarzeniami; Zarządzaniu procesem; Event Sourcing; CQRS i Actor Model. W połączeniu z DDD te style i wzorce architektury pomogą Tobie w implementacji systemów opartych o serwisy.
Naucz się korzystać ze Zdarzeń domenowych i Event Stormingu zarówno w projektach całych systemów (big picture), jak i projektach taktycznych na poziomie szczegółów (design level). Ćwiczenia wprowadzą Cię do zastosowania architektury opartej na zdarzeniach w implementacjach dnia 2.
W drugim dniu skupiamy się na projektowaniu taktycznym, co daje możliwość podjęcia właściwych, precyzyjniejszych decyzji dotyczących modelowania w głównej domenie (Core Domain). Niezależnie od tego, czy jest to użycie encji (Enities), obiektów wartości (Value Objects), Agregatów, Zdarzeń Domeny lub Usług Domenowych, które najlepiej pasują do Twojej konkretnej sytuacji modelowania, możesz zastosować każde z narzędzi taktycznych do użycia we własnym projekcie. W miarę upływu dnia poznasz zalety korzystania z każdego z narzędzi oraz zobaczysz, w jakich sytuacjach inne narzędzie zapewni lepsze efekty.
Prawdopodobnie w Twoim modelu domeny znajdą się encje które będą zarządzały zmianami stanu w ramach cyklu życia obiektów (mutable objects). Dowiedz się, jak właściwie zastosować to narzędzie do modelowania, ale także kiedy nie należy go używać. Żeby nie nadużywać Encji, dowiedz się, jak z nich korzystać wtedy, gdy koncepcja domeny musi się zmieniać z czasem.
Wykorzystaj to bezcenne, funkcyjne narzędzie do modelowania, którego powinieneś używać tak często, jak to możliwe. Dowiesz się o właściwościach obiektu wartości (value object) i dlaczego używanie Wartości tam, gdzie to możliwe, jest bezpieczniejszym sposobem projektowania. Dowiedz się, jak modelować koncepty jako Wartości a być może zdecydujesz że ten sposób modelowania pozwala Ci na zbudowanie modelu bez użycia encji, które są zmienne w czasie.
Skorzystaj z tego potężnego narzędzia do modelowania, aby kształtować, konstruować i komponować granice transakcji wokół wydzielonego konceptu domeny biznesu. Zmień swoje rozumienie encji na takie, które skaluje się szeroko i działa pod dużym obciążeniem, a jednocześnie implementuje istotne i zmienne w czasie reguły biznesu.
Dowiedz się, jak modelować, publikować i wykorzystywać fakty na bazie tego, co wydarzyło się w modelu domeny. Zobaczysz, jak duży wpływ mają Zdarzenia domenowe na Twoje projekty w całym przedsiębiorstwie/firmie.
Wykorzystaj operacje bezstanowe w swoim modelu, wtedy gdy jest to właściwe. Techniki modelowania obejmują zarówno usługi specyficzne dla domeny, jak i usługi o charakterze bardziej technicznym, często stosowane do integracji.
Zrozum znaczenie i techniki organizacji pojęć (concepts) w ramach modelu domeny. Po co męczyć się ze starannym tworzeniem obiektów domen, ale bez odpowiedniej modularyzacji przy użyciu Ubiquitous Language?
Zobacz, kiedy i jak używać fabryk do tworzenia obiektów domeny.
W dniu 3 łączymy wszystkie części, aby stworzyć aplikację. Patrzymy na różne sposoby zapisu agregatów za pomocą ORM, dokumentowych baz danych, bazy typu key-value store, a także poprzez wykorzystanie Event Sourcing-u. Następnie wnikamy głęboko w stosowanie technik Context Mapping-u, wracamy do projektowania strategicznego, ale tym razem opracowując rozwiązania integracyjne między główną domena (Core) a innymi kontekstami w całym systemie. Na koniec zwracamy uwagę na inne części aplikacji, takie jak interfejs użytkownika i zapytania za pomocą CQRS. Przyjrzymy się również, jak w razie potrzeby korzystać z usług aplikacji. Bazując na tej wiedzy będziesz lepiej przygotowany do realizacji własnego projektu DDD lub do lepszego wykorzystania DDD w swoich projektach.
Rozważ dwa podstawowe podejścia do zapisywania i odczytywania obiektów domeny. Dowiedz się, jak zapisać i odczytać agregaty przy użyciu baz danych SQL i NoSQL. Naucz się także, jak korzystać z Event Sourcing jako podejścia do zapisywania zdarzeń domeny oraz jak publikować Zdarzenia Domeny w celu dalszego wykorzystania.
Zastosuj zarówno REST, jak i messaging, aby zrealizować swoje mapy kontekstów w kodzie podczas integracji wielu kontekstów aplikacji korporacyjnych. Poznaj złożoność i wyzwania związane z rozproszonymi środowiskami obliczeniowymi oraz sposoby radzenia sobie z nimi. Ważną lekcją, którą należy podkreślić, jest modelowanie każdego Bounded Context-u w sposób przejrzysty i odrębny od tych, z którymi się integrujesz.
Dowiedz się, w jaki sposób komponenty otaczające model domeny składają się na całą aplikację. Poznaj strategie budowania interfejsu użytkownika i sposób tworzenia interfejs programowania aplikacji (API) za pomocą usług aplikacji. Dowiesz się, jak stosować CQRS na podstawie zdarzeń domenowych i Event Sourcing-u.