dla Architektów Oprogramowania
2 godz. 1 min · Full-stack i Programowanie
Rafał PiekaraSoftware KomandosZanurzymy się w definiowanie strategicznych wzorców Domain Driven Design, które stanowią fundament efektywnego zrozumienia problemów biznesowych. Omówimy kluczowe koncepty takie jak Subdomena czy Bounded Context.
Wzorce taktyczne to praktyczne aspekty DDD, które są kluczowe dla każdego architekta oprogramowania. W tej sekcji mocniej spojrzymy na kod. Dowiesz się, jak stosować i testować wzorce takie jak Value Object, Encja czy Agregat.
Bazy danych to serce wielu systemów, a ich prawidłowe użycie w kontekście DDD jest kluczowe. Omówimy najlepsze praktyki związane z integracją domeny i kontekstów z tabelami bazodanowymi. Poznasz techniki, które pozwolą Ci zachować integralność danych i spójność modelu domenowego, niezależnie od wybranej technologii bazodanowej.
Teoria jest ważna, ale praktyka czyni mistrza. Przejdziemy przez konkretne przykłady implementacji DDD w rzeczywistych projektach. Zobaczysz krok po kroku zastosowanie wzorców, zamodelowanie domeny i implementację. Praktyczne przykłady pomogą Ci zrozumieć, jak stosować DDD w codziennej pracy i jak wpływa to na komunikację z interesariuszami biznesowymi.
Każdy architekt oprogramowania spotkał się z systemami, które były nieczytelne i trudne do utrzymania - tak zwanymi "Big Ball of Mud". Nauczysz się, jak za pomocą DDD przeprowadzić refaktoryzację takiego systemu, przekształcając go w dobrze zorganizowane i zarządzalne struktury.
Kurs powstał z myślą o programistach aspirujących do roli architektów, architektach oprogramowania oraz liderach technicznych, którzy chcą pogłębić swoją wiedzę i umiejętności w zakresie stosowania Domain Driven Design. To materiał idealny dla tych, którzy znają już podstawy DDD i chcą podnieść swoje umiejętności na wyższy poziom, aby projektować złożone i skalowalne systemy. Niezależnie od tego, czy pracujesz nad dużymi projektami, chcesz usprawnić komunikację z zespołem i interesariuszami, czy szukasz nowych strategii na rozwiązywanie skomplikowanych problemów biznesowych - ten kurs jest dla Ciebie!
Ostatnia część faktoringu naszego Big Book of Meat będzie polegała na
zastosowaniu zdarzeń domenowych.
Jak my sobie te zdarzenia domenowe możemy zidentyfikować.
Punktem wyjścia może być dla nas ten add service i mamy tutaj
dodawanie nowego ogłoszenia i usuwanie tego ogłoszenia, więc myślę, że to jest
dobry moment, dobre miejsce, gdzie możemy sobie te zdarzenia
domenowe zdefiniować i opublikować.
Więc stwórzmy sobie tutaj w katalogu Domain katalog events i
stwórzmy pierwsze zdarzenie domenowe. Ad.
Posted by Eksportujemy sobie taką klasę add
posted i dodamy sobie tutaj jakieś pola ad id, które będzie string i posted ad,
który może być datą.
Definiujemy te wartości w konstruktorze.
I takie zdarzenie mamy zdefiniowane, więc mamy tutaj pierwsze zdarzenie.
Drugim zdarzenie będzie Add remove.
To jest istotne zdarzenie też ogłoszenie nam znika, więc dodajemy add remove
i analogicznie do Add posted.
Remove. Edit Mamy wszystko.
Mamy dwa pierwsze zdarzenia domenowe, które tutaj dodaliśmy.
Jeszcze przydałyby się tutaj jakiś publisher, więc to jest dobry moment, żeby
wdrożyć sobie katalog Infrastructure, który będzie odpowiadał za
publikowanie tych naszych zdarzeń domenowych.
Więc ja tutaj dorzucę sobie w AdWords i Semalt np.
katalog infra i tutaj sobie zrobimy klasę Publisher.
I w tej klasie Publisher będziemy mieć bardzo prostą logikę.
Jest tylko przykład będziemy mieć tylko publish i tutaj ten event się będzie
publikował, wobec czego naszym serwisie, np.
tutaj domenowych, możemy potrzebować takiego Publisher, a
więc sobie go tutaj rozstrzygniemy zaraz po repozytoriach.
Publisher mamy Publisher, a dodajmy go sobie tutaj do wartości i po każdym.
Po każdej operacji w naszym kodzie, w naszej aplikacji.
Ten event będziemy publikować, więc zróbmy sobie tutaj event.
To się równa new add posted Mamy to!
Tutaj dodamy nowy event event Add event event Add remove.
Mamy Add remove.
i tego naszego publish zaprzęg niemy do publikowania.
Publisher publish disk publisher Tu mam jeszcze literówkę.
Poprawię.
Wszystko gra publisher publish i tak samo tutaj będziemy This publisher
publish event.
Jeśli chodzi o ten event domenowe, który tutaj wrzucamy w serwisie aplikacyjnym, to
service aplikacyjny może odpowiadać za samo opublikowanie tego eventu.
Natomiast ten event może się tutaj gdzieś budować, wykonywać w którymś z agregatów
lub w metodzie agregatu lub w serwisie domenowe, a my będziemy na zewnątrz
publikować sobie ten event.
Jest to jeden ze sposobów publikacji w Domain Driven Design, więc wyszliśmy od
tego naszego Address Ticket System, więc możemy powiedzieć, że mamy tutaj serwis,
który obsługuje całą publikację ogłoszeń, mamy warstwę identyfikacji użytkownika
i też możemy sobie tworzyć kategoria.
Więc wyszliśmy z takiego jednego wielkiego monolitu tego pliku do
pięknie zorganizowanej struktury aplikacji w Domain Driven Design, gdzie
już widząc nazwy plików możemy stwierdzić jaka logika w tym serwisie zachodzi, w tym
w tej aplikacji.
Piękny przykład jak można zmienić trudny w utrzymaniu kod w łatwy w utrzymaniu, łatwy
w testowaniu teraz i testowanie Tak obiektów czy encji czy agregatów
jest wiele prostsze, bo mamy rozdzielona logikę, rozdzielone odpowiedzialności,
rozdzielone warstwy i przede wszystkim nasi interesariusze biznesowi
będą w stanie z nami rozmawiać, bo będziemy mówić tym samym
językiem, także na poziomie kodu.