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!
I wreszcie dochodzimy do kluczowego tematu w drewien design, czyli agregaty.
Co to są agregaty?
Ano agregaty Są to takie obiekty, które trzymają pieczę nad całymi operacjami
logicznymi, czyli całą wiedzę biznesową.
Wszystkie operacje domenowe, operacje biznesowe będą właśnie zdefiniowane
w agregatach i dla nas.
Informacje biznesowe, które będziemy do tego potrzebować będziemy brać z event
streamingu i traktujemy event story jako punkt wyjścia w ramach jednego kontekstu
może operować więcej agregatów, natomiast przyjmuje się, że
zawsze mamy taki główny agregat, tak zwany korzeń, agregat root,
który operuje na tych agregatach mniejszych i tymi mniejszymi agregatem i
mogą być też encje, bo agregat to jest pewien koncept, to nie jest konkretny
obiekt z konkretnymi cechami, ale też encja może służyć za agregat, bo będzie
mogła na przykład zmieniać stan lub wykonywać jakąś logikę biznesową.
Agregaty mają ściśle określone granice, mają ściśle określone, określone granice i
reguły biznesowe, którymi operują, więc będziemy tutaj mówić
o spójności agregatów.
Agregat zawsze musi istnieć również w spójnym stanie, więc stan agregatu,
atrybuty agregatu, stan zbudowanych encji musi być spójny.
Agregat nie może istnieć w nie spójnym stanie, nie może być błędny, więc
po stronie programisty i naszych testów będzie zapewnienie tej spójności
i operacji na agregacie.
Jak to będzie wyglądało w praktyce?
Przejdźmy teraz do kodu.
Mamy zdefiniowany agregat encje order item, które ma jakieś ID, więc
ten unikalny identyfikator, ale ma też referencję do produktu Entity Price.
Jest to jakaś tam encja, możemy pobrać jej stan i total price.
No i wreszcie mamy agregat order.
I ten order ma jakiś stan, więc ma jakieś atrybuty, ale też będzie miał operacje
operacje logiczne, które będą służyły nam do tego, żeby nasze zamówienie złożyć.
Naszym zamówieniem zarządzać, więc będziemy mogli stworzyć sobie
nowe zamówienie, ale dodanie nowych elementów zamówienia, nowych pozycji
odbywać się będzie zawsze przez metodę.
Witam, Nie ma tutaj serwera, który pozwoli nam buszować, dodawać do tablicy items
nowych elementów, ale będziemy zawsze przechodzić przez tę metodę.
Mamy pewien pewną regułę biznesową.
Analogicznie będzie z usuwaniem elementów zamówienia.
Możemy sobie wyliczyć sumę zamówienia lub to zamówienie
zakończyć i zobacz, że ta funkcja komplet Order zmienia nam stan
naszego agregatu na Completed.
Nie możemy przypisać sobie statusu z zewnątrz etc.
Ale będziemy zmieniać stan za pomocą metody Complete Order.
Musimy przejść przez pewne reguły biznesowe i tak jak mówiłem
korzeń agregatu agregat.
Korzeń order będzie wykonywał operacje lub odczyt z tych agregatów pochodnych z encji
pochodnych, które będą wchodziły w skład tego głównego agregatu.
Tak jak tutaj.
Wyliczając sumę zamówienia będziemy korzystać z metody Get Total
Price zdefiniowanej w Order Item.
Bardzo prosta implementacja agregatu.
Wystarczy, że zapamiętasz to, że agregat przechowuje wiedzę o regułach biznesowych
i jego stan musi być zawsze spójny.
Jak testować agregaty?
O tym powiem Ci w kolejnym materiale.