Zrozumienie biznesu to klucz do sukcesu programisty
1 godz. 30 min · Full-stack i Programowanie
Rafał PiekaraSoftware KomandosZgłębimy podstawy Domain Driven Design, skupiając się na zrozumieniu, czym jest domena i jakie role pełnią subdomeny w rozumieniu biznesu i projektowaniu oprogramowania. Dowiesz się, jak identyfikować i definiować domenę oraz subdomeny w kontekście biznesowym, co jest kluczowe dla efektywnego modelowania i implementacji systemów.
Skoncentrujemy się na jednym z kluczowych aspektów Domain Driven Design - definiowaniu granic kontekstów (Bounded Contexts). Nauczysz się, jak precyzyjnie wyznaczać te granice, co pozwala na lepszą separację i integrację różnych części systemu. Omówimy, jak wyznaczone granicę wpływają na jasność komunikacji w zespole oraz jak ułatwiają zrozumienie modelu biznesowego.
Spojrzymy na strategiczne wzorce DDD, skupiając się na kluczowych konceptach takich jak Subdomena i Bounded Context. Zrozumienie i umiejętność ich identyfikacji w strukturach biznesowych to podstawowa umiejętność w projektowaniu domenowym. Nie pominiemy też tematów pobocznych jak kontekst schizofreniczny czy Prawo Conwaya. Każdy z tych elementów pomoże Ci lepiej zrozumieć zastosowanie Domain Driven Design w praktyce.
Wzorce taktyczne są fundamentalne dla praktycznego modelowania i implementacji oprogramowania. O ile wzorce strategiczne wyrażają koncepcję, to wzorce taktyczne dotykają, tego, co kochają programiści i programistki czyli kodu. Zobaczysz jak i po co je stosować i jak mogą wspomagać spójność oraz transakcyjność danych.
Wszystko fajnie z tym DDD, ale jak to poukładać? Na to też znalazło się miejsce w kursie. Cały moduł poświęcimy na zapoznanie się z przykładową strukturą, organizacją plików i folderów aplikacji opartej o Domain Driven Design. Nie musisz się już zastanawiać, gdzie upchnąć Twoje klasy. Wszystko stanie się przejrzyste, intuicyjne i oczywiste.
Kurs powstał z myślą o programistach, architektach, liderach technicznych, a także ludziach biznesu, którzy potrzebują pogłębić swoją wiedzę o projektowaniu oprogramowania skoncentrowanego na domenie biznesowej. Niezależnie od tego, czy jesteś na początku drogi z DD, czy masz już trochę doświadczenia i chcesz usystematyzować lub odświeżyć wiedzę - ten kurs jest dla Ciebie!
W poprzednim materiale mówiliśmy o tym, czym są bandery, konteksty
i czym jest kontekst schizofreniczny i jednym z przejawów
tego, że powstaje kontekst historyczny, jest to, że mamy źle zwariowane granice
kontekstów, czyli źle określone granice.
I w tej lekcji skupimy się nad tym, jakie czynniki albo jakie metody możemy
wykorzystać, żeby te granice kontekstów dobrze definiować.
Granice kontekstów są o tyle ważne, że jeśli mamy dobrze wydzielony bandit
kontekst, to łatwo jest nam Zenka postulować w nim logikę biznesową i
trzymać straż tych nie zmienników biznesowych, które zawierają
się w tym Bandit kontekście.
I pierwszą z takich metodologii rozpoznawania valid owania granic
kontekstów w Domain Driven Design jest sprawdzanie autonomii kontekstów.
Musimy popatrzeć na nasze konteksty, które mamy już wydzielone, albo te, które chcemy
wydzielić pod kątem ich autonomii, w jakim zakresie dany kontekst jest autonomiczny.
Dobrym przykładem jest tutaj e-commerce, gdzie możemy mieć context inventory,
magazynowy, kontekst invisible, fakturowanie.
I te konteksty są w dużej mierze autonomiczne.
One się nie przenikają w żaden sposób.
Faktura, żeby wystawić fakturę za jakiś zakup nie musi wiedzieć nic na temat
stanu magazynowego danego produktu.
Zakup już się dokonał.
Tak samo magazyn zarządzając swoimi zasobami nie ma żadnego wpływu na to,
w jaki sposób numerów jemy fakturę.
Mówimy wtedy, że te dwa konteksty są autonomiczne.
Wszelkie operacje, jakie w nich zachodzą, wszelkie procesy biznesowe
zachodzą wewnątrz tych kontekstów bez konieczności interakcji
z innym kontekstem.
Konteksty są autonomiczne, więc patrząc na nasz kod, w którym mamy te konteksty
cieszące się dużą autonomią, zarządzające procesami biznesowymi wewnątrz siebie,
mówimy wtedy, że granice naszych kontaktów są dobrze wyznaczone.
Oczywiście te granice nie muszą być stałe raz na zawsze.
Konteksty ewoluują tak, jak ewoluują też reguły biznesowe.
Świat biznesu się zmienia.
Świat naszych klientów, klientów, którzy korzystają z systemów, z aplikacji się
zmienia, więc te granice mogą być płynne.
Tak samo autonomia naszych kontekstów w trakcie
trwania w trakcie wykorzystywania systemu może być płynna.
Ale to jest pierwszy punkt, pierwszy punkt, na który trzeba zwrócić uwagę
przy realizowaniu granic kontekstów.
To jest ich autonomia.
Punkt numer dwa to jest liczba zaangażowanych kontekstów w
daną operację logiczną czy proces biznesowy, w zależności od tego.
Im więcej kontekstów będzie zaangażowanych w jakiś proces biznesowy np.
trzymajmy się tego przykładu z eCommerce.
Wystawienia faktury.
Będzie to oznaczało, że te granice nie są dobrze wyznaczone.
Dobrym znakiem dobrego wyznaczania granic band kontekstów będzie to, jeśli nasz
proces biznesowy korzysta z możliwie najmniejszej ilości kontekstów, które w
dodatku będą jeszcze trzymać totalnie odrębną część logiki
biznesowej, więc liczba kontekstów operacji biznesowej będzie nam mówić o
tym, czy granice są wyznaczone dobrze czy źle.
I można przyjąć taki współczynnik, że im mniej mamy kontekstów zaangażowanych
w jakąś operację, tym lepiej.
Te granice mamy wyznaczone.
Kolejna metoda to zwracanie uwagi na informacje, które zmieniają się razem.
Jeśli zmieniamy np.
cenę produktu, to ta cena zmieni nam się w magazynie, ale
nie zmieni nam się na wystawionej już fakturze, więc te dwa konteksty
będą oddzielone od siebie.
Informacje nie będą się zmieniać razem w tych dwóch kontekstach.
Jeśli informacje w jakimś obiekcie, w jakiejś tabeli, bazy danych zmieniają się
razem Jednocześnie to jest dobry znak na to, że powinna ta część procesu być
Zenka postulowana w band and Context.
Więc mamy informacje zmieniające się razem i idąc dalej będziemy mieć
informacje, które będą używane razem.
Jeżeli odczytujemy te same informacje z różnych tabel do wykonania
tego samego procesu biznesowego.
Tu mamy z kolei znak, że te informacje powinny znaleźć się w jednym kontekście.
Jeśli mamy informacje, które musimy odczytać z kilku kontekstów, będzie to
oznaczało, że nasze granice nie są dobrze wyznaczone.
I kolejna metoda to jest odpowiedzialność kontekstu.
To ma wiele wspólnego z tym pierwszym punktem, z autonomią.
Natomiast tutaj mamy odpowiedzialność za zmiany, odpowiedzialność za operacje
logiczne, jeśli nasz kontekst jest odpowiedzialny za zbyt wiele rzeczy, zbyt
wiele procesów biznesowych, to może być znak, że ten kontekst jest
zbyt duży i powinien być podzielony na mniejsze bandery konteksty.
To będzie znak, że ten kontekst jest zbyt duży i powinien być podzielony
na mniejsze bandery konteksty.
Więc mamy tutaj odpowiedzialność kontekstu.
Następną rzeczą będą integracje.
Spójrzmy na integrację, z jakimi ma do czynienia nasz bandery context.
Mogą to być integracje zewnętrzne z jakimiś zewnętrznymi usługami,
zewnętrznymi serwisami, ale też wewnętrzne integracje z
innymi kontekstami w naszym systemie.
I tutaj też, jeśli mamy jakąś integracje, która będzie
wykorzystywana w wielu kontekstach, to może być znak, że te konteksty zostały
wyznaczone niepoprawnie i może powinny być połączone w jeden kontekst, który będzie
korzystał z tej jednej integracji w jednym miejscu.
Więc warto spojrzeć też na ilość integracji w naszych procesach.
No i wreszcie będziemy mieć jeszcze jedno źródło prawdy.
Jeśli mamy informacje, które się zmieniają razem, informacje, które używane są razem,
możemy mieć też źródło prawdy.
Czy kontekst jest jedynym źródłem prawdy dla jakiegoś procesu biznesowego,
dla jakichś danych biznesowych?
Jeśli nie jest, to znaczy, że granica mogła nie zostać wyznaczona odpowiednio.
Będziemy dążyć do tego w naszym kodzie przy projektowaniu Domain Driven Design,
żeby kontekst mógł być możliwie jak najbliżej źródła prawdy, żeby on był tym
jednym źródłem prawdy dla procesu biznesowego.
No i na koniec mamy coś takiego, co można określić jako
wymagania bez sensu, bezsensu, nielogiczne wymagania anty
anty wymagania nie biznesowe Wymagania.
Różne pojęcia spotkasz w literaturze.
Są to takie wymagania, które z punktu widzenia różnych kontekstów mogą
się wykluczać lub będą bezsensu.
Przykładem takiego wymagania bezsensu może być to, o czym mówiliśmy wcześniej w
e-commerce, gdzie będzie takie wymaganie, że faktura nie
może być wystawiona za produkt, który wcześniej nie znalazł się w magazynie,
a magazyn może mieć z kolei wymaganie, że nie może przyjąć produktu
do swojego inventory.
Do magazynu takiego produktu, za który nie ma wystawionej faktury,
mamy sprzeczne wymagania.
To oczywiście bezsensu, więc łatwo wyłapać takie błędy logiczne.
W takich bardzo modelowych procesach natomiast zdarzą się takie systemy, w
których te błędy logiczne czy anty wymagania będą trudne do wyłapania.
Dlatego wymaga to głębokiej analizy i dużego pochylenia się nad
komunikacją między biznesem.
Żeby dobrze zrozumieć wszelkie funkcjonalności i wymagania
biznesowe, które przychodzą do zespołu programistycznego.
Aby te anty wymagania mogły być wyłapane i konteksty mogły zostać dobrze wydzielone,
więc mamy kilka punktów, kilka metod, które pomagają nam wydzielić
granice, wariować granice kontekstów.
Ale na koniec chcę, żebyś pamiętał pamiętała o tej jednej rzeczy że granice
nie są stałe raz na zawsze, bo biznes się zmienia, ewoluuje, więc te
granice też mogą być elastyczne.
Dlatego zawsze trzeba mieć w głowie te kilka metod, które możemy wykorzystywać,
żeby te nasze granice odświeżać, żeby one ewoluowały, aby konteksty
były wyznaczone prawidłowo.