@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 ?
@technites_pl
Architekt to teraz rola ?
... i to nasza ?
... i jeszcze te wszystkie
BDD, CDD, DDD, ...
kiedyś było łatwiej ...
@technites_pl
@technites_pl
Tylko efekty nie były najlepsze ...
... było łatwiej
@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ść
@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
@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
@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 ?
@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
@technites_pl
żeby oddzielić:
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
@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
@technites_pl
DDD pozwala stawiać pytania
o środki architektoniczne
w obrębie właściwie postawionych granic
@technites_pl
@technites_pl
@technites_pl
@technites_pl
dział magazynowy ?
zarząd ?
dział prawny ?
dział sprzedaży ?
wszyscy po trochu ?
@technites_pl
katalog ?
dział marketingu ?
dział magazynowy ?
dział sprzedaży ?
wszyscy po trochu ?
tylko jaki to dział ?
ale moduł Sales czy CRM ?
@technites_pl
@technites_pl
żeby:
@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
@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 ?
@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
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 ?
@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
@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
@technites_pl
żeby oddzielić:
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.
@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
@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
@technites_pl
Procesy biznesowe
Reguły biznesowe
Prawo
Przewidywane obciążenie
Struktura organizacyjna
Aktualne implementacje
...
...
SLA
SYSTEM
Dostępne technologie
Pożądany stos technologiczny
...
...
...
...
@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
@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
@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