SlideShare a Scribd company logo
Domain-Driven Design
Jak stworzyć aplikację używając DDD
Mariusz Kopylec
Domena
Dziedzina, w obrębie której budowane jest rozwiązanie
zadanego problemu.
Domena
Problem
• Operacje arytmetyczne
• Implementacja aplikacji Java
• Projektowanie aplikacji
Domena
• Liczby rzeczywiste
• JDK
• „Wspólny język”
Domena: wspólny język
• Role: ekspert domenowy, programista
• Ustalony słownik pojęć
• Narzędzie do opisu działania aplikacji
Domena: wspólny język
Usługa ma generować tokeny, które mają być ważne przez
określony czas.
Token można wygenerować z domyślnym lub podanym czasem
życia.
Usługa powinna udostępniać możliwość walidowania tokenów
oraz ich odwoływania.
Odwołany token jest nieważny.
Nie można odwołać tego samego tokena wiele razy.
Domena
Reprezentacją domeny w kodzie źródłowym jest model.
Architektura
INTERFEJS UŻYTKOWNIKA
LOGIKA APLIKACJI
MODEL
INFRASTRUKTURA
Interfejs użytkownika
Odpowiedzialny za interakcje z użytkownikiem.
Interfejs użytkownika
• Graficzny interfejs użytkownika
• Strona internetowa
Logika aplikacji
Definiuje funkcjonalności (przypadki użycia).
Logika aplikacji
• Serwis aplikacyjny
• Kontrakt z serwisem infrastrukturalnym
Serwis aplikacyjny
• Metoda = przypadek użycia
• Operuje na modelu
• Bezstanowy
Kontrakt z serwisem infrastrukturalnym
• Definiuje funkcjonalności pomocnicze
• Interfejs
Model
Klocki, z których budujemy funkcjonalności.
Składa się z Domain Building Blocks.
Model
• Agregat: encja, value object
• Serwis domenowy
• Fabryka
• Repozytorium
• Zdarzenie domenowe
• Polityka
Agregat
• Podstawowa jednostka operacyjna
• Powiązane encje i value objecty
• Jeden punkt wejściowy – korzeń
• Zawsze w prawidłowym stanie
Agregat: encja
• Unikalne ID
• Mutowalna
• Nieanemiczna
Agregat: value object
• Brak unikalnego pola
• Niemutowalny
• Typ złożony
Serwis domenowy
• Zachowanie logicznie nie pasujące do żadnej encji
• Proces wywodzący się ze „wspólnego języka”
• Bezstanowy
• Może być interfejsem
Fabryka
• Tworzy agregaty
• Ogranicza sposoby tworzenia agregatu
• Wyciąga złożoną logikę z konstruktorów
Repozytorium
• Zarządza utrwalaniem agregatów
• Interfejs
Zdarzenie domenowe
• Oddziela model od innych warstw
• Konsumowane w innych warstwach
Polityka
• Odzwierciedla wykonanie jednej operacji na kilka sposobów
• Wzorzec projektowy: Strategia
Infrastruktura
Warstwa pomocnicza dla pozostałych warstw.
Infrastruktura
• Serwis infrastrukturalny
• Implementacja repozytorium
Serwis infrastrukturalny
• Spełnia kontrakt zdefiniowany w innych warstwach
• Bezstanowy
Implementacja repozytorium
• Spełnia kontrakt zdefiniowany przez repozytorium
• Określa sposób utrwalania agregatów
• Bezstanowa
Zasady pisania kodu
• Brak łączonych metod na agregacie
• Warunki w osobnych metodach
• „Fail fast”
• Dobrze nazwane klasy i metody
• Dostępność ograniczona do minimum
Zapamiętaj!
Agregat != Tabela

More Related Content

PDF
Domain-Driven Design und Hexagonale Architektur
Torben Fojuth
 
PPTX
Domain driven design
jstack
 
PDF
What is DDD and how could it help you
Luis Henrique Mulinari
 
PDF
Domain-driven design - tactical patterns
Tom Janssens
 
PDF
From legacy to DDD
Andrzej Krzywda
 
PDF
Ddd reboot (english version)
Thomas Pierrain
 
PPTX
CQRS and what it means for your architecture
Richard Banks
 
PPTX
Our way to microservices
Andi Pangeran
 
Domain-Driven Design und Hexagonale Architektur
Torben Fojuth
 
Domain driven design
jstack
 
What is DDD and how could it help you
Luis Henrique Mulinari
 
Domain-driven design - tactical patterns
Tom Janssens
 
From legacy to DDD
Andrzej Krzywda
 
Ddd reboot (english version)
Thomas Pierrain
 
CQRS and what it means for your architecture
Richard Banks
 
Our way to microservices
Andi Pangeran
 

Viewers also liked (13)

PDF
Modelling a complex domain with Domain-Driven Design
Naeem Sarfraz
 
PPTX
Domain driven design
Mustafa Dağdelen
 
PPTX
Designing APIs and Microservices Using Domain-Driven Design
LaunchAny
 
PPTX
Why Domain-Driven Design and Reactive Programming?
VMware Tanzu
 
PDF
Developing event-driven microservices with event sourcing and CQRS (phillyete)
Chris Richardson
 
PDF
Domain Driven Design Introduction
Tung Nguyen Thanh
 
PPTX
A Practical Guide to Domain Driven Design: Presentation Slides
thinkddd
 
PDF
Tactical DDD (just better OOP?) - PHPBenelux 2017
Matthias Noback
 
PPTX
Architecting Microservices in .Net
Richard Banks
 
PDF
The art of Software Design
Thomas Pierrain
 
PDF
Developing microservices with aggregates (devnexus2017)
Chris Richardson
 
PDF
Php 100k
Francois Zaninotto
 
PDF
DDD patterns that were not in the book
Cyrille Martraire
 
Modelling a complex domain with Domain-Driven Design
Naeem Sarfraz
 
Domain driven design
Mustafa Dağdelen
 
Designing APIs and Microservices Using Domain-Driven Design
LaunchAny
 
Why Domain-Driven Design and Reactive Programming?
VMware Tanzu
 
Developing event-driven microservices with event sourcing and CQRS (phillyete)
Chris Richardson
 
Domain Driven Design Introduction
Tung Nguyen Thanh
 
A Practical Guide to Domain Driven Design: Presentation Slides
thinkddd
 
Tactical DDD (just better OOP?) - PHPBenelux 2017
Matthias Noback
 
Architecting Microservices in .Net
Richard Banks
 
The art of Software Design
Thomas Pierrain
 
Developing microservices with aggregates (devnexus2017)
Chris Richardson
 
DDD patterns that were not in the book
Cyrille Martraire
 
Ad

Similar to Domain-Driven Design workshops (20)

PDF
Domain Driven Development
Konrad Russa
 
ODP
Aplikacje internetowe (2010)
Adrian Kalbarczyk
 
PDF
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Mateusz Paprocki, PMP
 
PPTX
Jak zostać mobile deweloperem w 1 dzień
Paweł Kondraciuk
 
PDF
Michał Dec - Quality in Clouds
kraqa
 
PPTX
DSP Forecasting wdi
PrzemysawPiotrowski6
 
PPTX
Techniczna organizacja zespołu cz 2
intive
 
PDF
JavaScript, Moduły
Mariusz Nowak
 
PPTX
Programowanie na wiele platform mobilnych - 2012
Cezary Walenciuk
 
PPT
Project "Draw Me" -- Presentation
Michal_Zwierzyk
 
PDF
Intro do Domain Driven Design. ( PL )
GOG.com dev team
 
PDF
Produkcja aplikacji internetowych
Tomasz Borowski
 
PDF
Nie tylko C# - Ekosystem Microsoft dla programistów
intive
 
PDF
React Native by Artur Staszczyk
Women in Technology Poland
 
PPTX
Jak stworzyć udany system informatyczny
qbeuek
 
PPTX
Dwa sposoby na pisanie aplikacji bez błędów
Michal Lukaszewski
 
PPTX
Behat
Konrad Masalski
 
PDF
CI oraz CD w złożonym projekcie o małym budżecie
Grzegorz Godlewski
 
PPSX
Wyboista droga do dobrego kodu. ...
Future Processing
 
PPTX
Jak podwoić wartość kodu .NET?
javOnet
 
Domain Driven Development
Konrad Russa
 
Aplikacje internetowe (2010)
Adrian Kalbarczyk
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Mateusz Paprocki, PMP
 
Jak zostać mobile deweloperem w 1 dzień
Paweł Kondraciuk
 
Michał Dec - Quality in Clouds
kraqa
 
DSP Forecasting wdi
PrzemysawPiotrowski6
 
Techniczna organizacja zespołu cz 2
intive
 
JavaScript, Moduły
Mariusz Nowak
 
Programowanie na wiele platform mobilnych - 2012
Cezary Walenciuk
 
Project "Draw Me" -- Presentation
Michal_Zwierzyk
 
Intro do Domain Driven Design. ( PL )
GOG.com dev team
 
Produkcja aplikacji internetowych
Tomasz Borowski
 
Nie tylko C# - Ekosystem Microsoft dla programistów
intive
 
React Native by Artur Staszczyk
Women in Technology Poland
 
Jak stworzyć udany system informatyczny
qbeuek
 
Dwa sposoby na pisanie aplikacji bez błędów
Michal Lukaszewski
 
CI oraz CD w złożonym projekcie o małym budżecie
Grzegorz Godlewski
 
Wyboista droga do dobrego kodu. ...
Future Processing
 
Jak podwoić wartość kodu .NET?
javOnet
 
Ad

Domain-Driven Design workshops