Skip to content

Instantly share code, notes, and snippets.

@mpraglowski
Forked from tjaskula/iddd_polish.md
Last active November 3, 2019 14:34
Show Gist options
  • Save mpraglowski/b02dad7e15a74f4f4d7bd8864df39370 to your computer and use it in GitHub Desktop.
Save mpraglowski/b02dad7e15a74f4f4d7bd8864df39370 to your computer and use it in GitHub Desktop.
Description of IDDD Workshop in Polish

Translated from https://kalele.io/live-training/iddd/

Jak Twój zespół może wykorzystać DDD

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.

Dzień 1

Pierwsze kroki, projektowanie strategiczne (Strategic Design) i architektura

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.

Rozpoczęcie pracy z DDD

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.

Domeny, subdomeny i Bounded Context-y

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.

Context Mapping

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.

Architektury wspierające DDD

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.

Zdarzenia domenowe i EventStorming

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.

Dzień 2

Projektowanie taktyczne (Tactical Design)

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.

Encje

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.

Obiekty wartości (Value Objects)

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.

Agregaty

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.

Zdarzenia domenowe

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.

Usługi domenowe

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.

Moduły

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?

Fabryki

Zobacz, kiedy i jak używać fabryk do tworzenia obiektów domeny.

Dzień 3

Persystencja agregatów, integracja Bounded Context-ów, Aplikacja

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.

Repositories i event sourcing

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.

Zintegrowane Bounded Context-y

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.

Aplikacja

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment