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!
No i przyszła pora na KOR.
Odkrywanie bandy kontekstów KOR domain Driven Design.
O ile zagadnienia domeny i subdomeny są trochę bardziej abstrakcyjne,
bardziej ogólne i dotyczą definicji problemów biznesowych,
to Bandit konteksty to już czysta implementacja.
Czyli tutaj tak naprawdę na grubo wjeżdżają programiści.
Podstawą wydzielenia bandery kontekstów odkrycia tych naszych granic
między kontekstami, między modułami systemu jest zrozumienie domeny poprzez
analizę samej domeny, jej subdomen, co już omawialiśmy wcześniej.
Komunikacja z biznesem wjeżdża cały czas.
To jest bardzo ważny punkt całego zagadnienia Domain driven Design.
Żeby być w bieżącej komunikacji z interesariuszami ekspertami domenowych.
Analizujemy modele domenowe pod kątem granic, więc mamy już ten model
zdefiniowany na etapie definiowania domeny subdomen.
I teraz szukamy granic.
Szukamy miejsc, w których te konteksty bardzo mocno się odcinają.
Będzie osobna lekcja o szukaniu granic, więc nie wchodzimy tutaj zbytnio w
szczegóły, jeśli chodzi o takie szukanie granic.
Polega to na identyfikacji naturalnych granic w problemach biznesowych, więc tak
ogólnie tylko sobie teraz omówimy i identyfikując te granice obserwujemy
punkty zmiany języka domenowe.
Dobrym przykładem jest ecommerce, gdzie produkt magazynowy to nie jest ten sam
produkt, który jest w pressingu w offer ringu, bo w pracy ringu możemy mieć np.
paczkę książek.
Natomiast magazynie produkt to jest fizycznie jedna książka.
Kontekst musi być spójny, musi być spójny z modelem, musi być spójny w obrębie
modelu, nie może być z nim sprzeczny.
Nie może procesować operacji totalnie niezwiązanych z modelem biznesowym.
Klasycznym obrazem kontekstów jest modularny dość, więc konteksty funkcjonują
w modułach, są niezależne od siebie i naszym zadaniem jako programistów jako
architektów jest zapewnienie niezależności tych kontekstów poprzez wydzielenie
odpowiednich granic i zaplanowanie interakcji między nimi
w odpowiedni sposób.
Te konteksty nie mogą się jakoś przenikać.
One muszą mieć ze sobą ściśle określone interakcje, ściśle określony kontrakt.
No i wszystko ewoluuje, więc tutaj ewoluuje.
Czy nasze konteksty faktycznie mają jasno wydzielone granice, konkretnie
wydzielone i dostosowujemy te granice w czasie, Jesteśmy otwarci na te zmiany.
No i jeśli chodzi o samo szukanie granic, musimy popatrzeć tak na procesy biznesowe,
gdzie granice często pokrywają się z różnymi procesami biznesowymi, więc
mamy jasno wydzielone te granice.
Przykładem jest, jak już mówiłem, everything i marketing.
Bardzo jasno widać zakres granic, nie fakturowanie czy działalność
marketingowa firmy.
Szukamy języka, gdzie język zmienia się między kontekstami, między granicami.
Mówiłem o tym produkcie, że produkt w pracy będzie czymś
innym niż produkt w magazynie.
Język się zmienia, pojęcie jest to samo, ale już język, rozumienie
tego pojęcia się zmieniło.
I to jest ten moment, gdzie możemy wytyczyć granicę.
Patrzymy na zależności, gdzie mniejsza liczba zależności
sugeruje nam naturalną granicę.
Im mniej zależny jest kontekst, im bardziej niezależny, niepodległy kontekst.
Można powiedzieć independent.
Po angielsku mówią architekci.
To ten kontekst ma większą szansę, żeby być tutaj samodzielnym kontekstem.
Musimy bardziej się zagłębiać.
Patrzymy też na to, co się zmienia w obszarze kontekstu.
Obszary częstych zmian mogą wymagać oddzielnego kontekstu.
Jeśli coś często się zmienia razem, spójnie, czyli dane, które
zmieniają się razem, jakieś klasy, które zmieniają się razem,
to jest dla nas wskazówka, że może powinniśmy właśnie ten zakres
wydzielić do oddzielnego kontekstu.
Punkty integracji z zewnętrznymi systemami także mogą nam sugerować granice, więc
często będzie tak, że integracja z systemem.
Adaptery, które będziemy wpinać do naszego systemu pluginy mogą sugerować,
gdzie granica kontekstu przebiega.
Każda integracja może mieć osobny kontekst, może mieć, więc
warto na to zwrócić też uwagę.
Mówiłem już o zmienności danych, więc będzie tutaj trzeba poruszyć temat bazy
danych, więc w następnej lekcji pokażę jak pracować z bazami danych i
kontekstami ograniczonymi.
A więc to, jakie bundle Context ma wpływ na strukturę i nazewnictwo w bazie danych.