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

R_{μν} − \frac {1} {2} Rg_{μν} = \frac {8πG} {c^4} T_{μν}

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,253