Jak DDD ma się do Architektury ?
@technites_pl
@technites_pl
Jak to zrobić (szybko) ?
Kiedy tego użyć ?
Czy to już na pewno wszystko ?
Jakie pytania są istotne ?
@technites_pl
Co to jest ?
Po co tego używać ?
Dlaczego to działa ?
"Filozoficzna" perspektywa
Po transformacji Agile
@technites_pl
Architekt to teraz rola ?
... i to nasza ?
... i jeszcze te wszystkie
BDD, CDD, DDD, ...
kiedyś było łatwiej ...
Ivory Tower
@technites_pl
W czasach big up-front design
@technites_pl
Tylko efekty nie były najlepsze ...
... było łatwiej
Co tak naprawdę działa ?
@technites_pl
Z Hexagonal Architecture też chyba są problemy ...
Tylko podobno te wszystkie DDD nie działają
@technites_pl
Marcin Markowski
itlibrium.com
meetup.com/DDD-WAW
Blog
Szkolenia
Konsultacje
bottega.com.pl
Społeczność
Od czego by tu zacząć ?
@technites_pl
Baza wybrana ...
... co teraz ?
Warstwy !
UI / API
BLL
DAL
Architektura aplikacyjna
Warstwy / Hexagonal, Taktyczne DDD
@technites_pl
Architektura systemowa
Strategiczne DDD, Złożoność
Architektura wdrożeniowa
Monolit, Mikroserwisy
Projektowanie
Widoki architektoniczne
Dynamika
Równowaga, Porządek ewolucyjny
Tradycyjnie czy clean ?
@technites_pl
Domain
Application
Adapters
HTTP
(no)SQL
External API
. . .
Aggregate
Policy
Factory
Service
Value Object
Command Handler
Event Handler
App Service
Business Logic
Infrastructure
UI / API
Po co w ogóle te warstwy ?
@technites_pl
żeby móc wymienić technologię ?
żeby redukować coupling ?
Tylko czy same warstwy to zapewnią ?
żeby móc skupić się na domenie ?
Tylko jaki układ warstw to zapewnia ?
żeby zwiększyć testowalność ?
Tylko co z mock-ami ?
Jak często jest to potrzebne ? Czy to się udaje ?
Drivery architektoniczne
@technites_pl
Procesy biznesowe
Reguły biznesowe
Prawo
Przewidywane obciążenie
Struktura organizacyjna
Aktualne implementacje
...
...
SLA
SYSTEM
Dostępne technologie
Pożądany stos technologiczny
...
...
...
...
Procesy biznesowe
Reguły biznesowe
Prawo
Przewidywane obciążenie
Struktura organizacyjna
Aktualne implementacje
SLA
Dostępne technologie
Pożądany stos technologiczny
@technites_pl
Warstwy pozwalają wyznaczać granice
między komponentami
zależnymi od różnych kategorii driverów
Potrzebujemy granic
@technites_pl
żeby oddzielić:
- to co zależy od różnych czynników
- to co zmienia się w różnym tempie
- to co istotne od tego co drugorzędne
Czy zawsze potrzebujemy warstw ?
@technites_pl
Czy w całym systemie podział na warstwy powinien przebiegać identycznie ?
Czy sposób podziału na warstwy
może się zmieniać w czasie życia systemu ?
@technites_pl
Bez zrozumienia biznesu nie da się
nakreślić bigger picture
Bez bigger picture nie wiadomo
w jakich granicach rozpatrywać
podział na warstwy
Jak zrozumieć biznes ?
@technites_pl
Tylko o co w tym właściwie chodzi ?
Do tego podobno przydawało się DDD
To teraz nasze oficjalne podejście ...
Architektura aplikacyjna
Warstwy / Hexagonal, Taktyczne DDD
@technites_pl
Architektura systemowa
Strategiczne DDD, Złożoność
Architektura wdrożeniowa
Monolit, Mikroserwisy
Projektowanie
Widoki architektoniczne
Dynamika
Równowaga, Porządek ewolucyjny
@technites_pl
Czy Bounded Contexty powinny być zgodne
ze strukturą organizacyjną firmy ?
Czy jak Encja nie ma publicznych pól
to jest już dobrym Agregatem ?
Czy podział projektu na
Controllers, Repositories, Entities, Handlers, etc.
to optymalna struktura Modułów ?
@technites_pl
Czy to napewno DDD
nie działa ?
@technites_pl
Problem - Rozwiązanie
DDD pozwala stawiać pytania
o środki architektoniczne
w obrębie właściwie postawionych granic
@technites_pl
Co to jest Model ?
@technites_pl
Abstrakcje biznesowe
@technites_pl
Czy możemy panu sprzedać ten produkt ?
@technites_pl
dział magazynowy ?
zarząd ?
dział prawny ?
dział sprzedaży ?
... kto to wie ?
wszyscy po trochu ?
Ile ten produkt w zasadzie kosztuje ?
@technites_pl
katalog ?
dział marketingu ?
dział magazynowy ?
dział sprzedaży ?
... kto to wie ?
wszyscy po trochu ?
tylko jaki to dział ?
ale moduł Sales czy CRM ?
- struktura organizacyjna jest często anachroniczna
- to co modelujemy nie zawsze widać gołym okiem
- nie wszystko jest potrzebne w modelu
- ...
@technites_pl
Trudności z odwzorowaniem rzeczywistości
Potrzebujemy granic
@technites_pl
żeby:
- zachować jednoznaczność terminów
- oddzielić niezależne koncepcje biznesowe
- grupować reguły biznesowe
Jak stawiać granice ?
@technites_pl
Interface Segregation
Single Responsibility
Abstraction
Encapsulation
SOLID
OOP
To nie jest takie proste ...
GRASP
RDD
Open - Close
Liskov
DRY
Czysto techniczne zasady nie nadają się do wyznaczania granic biznesowych
@technites_pl
... ale ich naruszenie często poprawnie wskazuje, że aktualne granice nie są zgodne z biznesem
Czy model jest prawdziwy ?
@technites_pl
All models are wrong but some are useful
- George Box
Tylko czy napewno ?
Co to znaczy, że model nie jest prawdziwy ?
Użyteczny jest dług techniczny
Hakowanie modelu jest użyteczne
Użyteczne może coś być przez przypadek
@technites_pl
Użyteczne w długiej perspektywie czasowej
jest to co prawdziwe
Jaka jest perspektywa czasowa
w przeciętnym projekcie ?
ale tylko na krótko ...
@technites_pl
Czy same granice wystarczą ?
Czy części modelu różnią się ilościowo czy jakościowo ?
Czy w każdej części sprawdzą się
te same narzędzia ?
Złożoność
@technites_pl
Architektura aplikacyjna
Warstwy / Hexagonal, Taktyczne DDD
@technites_pl
Architektura systemowa
Strategiczne DDD, Złożoność
Architektura wdrożeniowa
Monolit, Mikroserwisy
Projektowanie
Widoki architektoniczne
Dynamika
Równowaga, Porządek ewolucyjny
Read Model
@technites_pl
Jak to rozdzielić ?
Deep Model
Data Processing
Utilities
CRUD
@technites_pl
@technites_pl
Złożoność modelu wyznacza optymalny styl architektoniczny dla jego implementacji
@technites_pl
Czy tylko drivery funkcjonalne
mają wpływ na
granice architektoniczne ?
Mikroserwisy
@technites_pl
To ile my tych architektur mamy ???
Kubernetes już jest i chyba działa
To miała być nasza nowa architektura ...
Architektura aplikacyjna
Warstwy / Hexagonal, Taktyczne DDD
@technites_pl
Architektura systemowa
Strategiczne DDD, Złożoność
Architektura wdrożeniowa
Monolit, Mikroserwisy
Projektowanie
Widoki architektoniczne
Dynamika
Równowaga, Porządek ewolucyjny
Jak wdrożenie
ma się do modelu ?
@technites_pl
Czy mikroserwis == Bounded Context ?
Czy mikroserwis == Moduł ?
Czy mikroserwis == Building Block ?
@technites_pl
@technites_pl
Architektura systemowa i wdrożeniowa
są wobec siebie ortogonalne
Potrzebujemy granic
@technites_pl
żeby oddzielić:
- to co powinno być niezależnie wdrażane
- to co wymaga różnych zasobów
- to co chcemy niezależnie skalować
Jeżeli mikroserwisy nie są odpowiedzią
na drivery architektoniczne to jest to
bardzo kosztowny over-engineering
@technites_pl
@technites_pl
Procesy biznesowe
Reguły biznesowe
Prawo
Przewidywane obciążenie
Struktura organizacyjna
Aktualne implementacje
...
...
SLA
SYSTEM
Dostępne technologie
Pożądany stos technologiczny
...
...
...
...
Drivery organizacyjne, jakościowe, etc.
Architektura wdrożeniowa
Jak to połączyć ?
@technites_pl
To się wszystko łączy ???
Czyli jak to jest ???
Można
jeszcze raz ?
Architektura aplikacyjna
Warstwy / Hexagonal, Taktyczne DDD
@technites_pl
Architektura systemowa
Strategiczne DDD, Złożoność
Architektura wdrożeniowa
Monolit, Mikroserwisy
Projektowanie
Widoki architektoniczne
Dynamika
Równowaga, Porządek ewolucyjny
@technites_pl
Problem
Projekt
Implementacja
f(x)
g(x)
DDD
Model
Integracja
Warstwy
Mikroserwisy
Aplikacyjna
Systemowa
Wdrożeniowa
Pipes&Filters
Monolit
Drivery architektoniczne
Ludzie i ich abstrakcje
Działalność operacyjna
Wizja rozwoju
@technites_pl
Przestrzeń Projektu to nasze
podstawowe środowisko pracy
Uwzględnienie wszystkich driverów
wymaga patrzenia na system
z wielu perspektyw
A co z utrzymaniem ?
@technites_pl
... albo łatać na szybko ...
Ale to się zaraz wszystko pozmienia ...
I trzeba to będzie przepisać od nowa ?
Architektura aplikacyjna
Warstwy / Hexagonal, Taktyczne DDD
@technites_pl
Architektura systemowa
Strategiczne DDD, Złożoność
Architektura wdrożeniowa
Monolit, Mikroserwisy
Przestrzeń projektu
Widoki architektoniczne
Dynamika
Równowaga, Porządek ewolucyjny
@technites_pl
Dynamika systemu
equilibrium !!!
Zmiany są nieuchronne
@technites_pl
Procesy biznesowe
Reguły biznesowe
Prawo
Przewidywane obciążenie
Struktura organizacyjna
Aktualne implementacje
...
...
SLA
SYSTEM
Dostępne technologie
Pożądany stos technologiczny
...
...
...
...
Jaki inny system ma problemy z równowagą ?
@technites_pl
@technites_pl
Przyczyną kryzysu w projekcie są
nagromadzone niedostosowania
między systemem a rzeczywistością
Dług techniczny to "haki"
mające ukryć prawdziwy obraz sytuacji
Porządek ewolucyjny
@technites_pl
Równowaga jest celem
w nieustannie zmieniającym się świecie,
a nie stanem który da się osiągnąć i utrwalić
@technites_pl
Dzisiejsze rozwiązanie jutro staje się
częścią problemu
Takeaways
@technites_pl
@technites_pl
SOLID, DDD, mikroserwisy, etc.
autonomia
granice
po co ?
po co ?
skalowalność
utrzymywalność
po co ?
rozwój
@technites_pl
Właściwy sens zasad i wzorców
bardzo łatwo jest zgubić,
gdy patrzy się na nie
z czysto technicznej perspektywy
@technites_pl
Nie da się zaprojektować dobrej architektury bez głębokiej wiedzy domenowej
@technites_pl
Rzeczywistość się zmienia,
ale nawet w biznesie
nie wywraca się do góry nogami
każdego dnia
systemy IT też nie muszą
@technites_pl
Autonomia oparta na głębokim poznaniu driverów architektonicznych
nie zniknie już następnego dnia
[...] architektom w każdym przypadku należy się większe uznanie [...]
Znają bowiem przyczyny tego co wykonują.
@technites_pl
- Arystoteles
@technites_pl
Marcin Markowski
itlibrium.com
meetup.com/DDD-WAW
Blog
bottega.com.pl
Społeczność
Szkolenia
Konsultacje
DDD a Architektura
By Marcin Markowski
DDD a Architektura
- 1,824