SlideShare une entreprise Scribd logo
1  sur  29
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

Contenu connexe

En vedette

Modelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignModelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignNaeem Sarfraz
 
Designing APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven DesignDesigning APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven DesignLaunchAny
 
Why Domain-Driven Design and Reactive Programming?
Why Domain-Driven Design and Reactive Programming?Why Domain-Driven Design and Reactive Programming?
Why Domain-Driven Design and Reactive Programming?VMware Tanzu
 
Developing event-driven microservices with event sourcing and CQRS (phillyete)
Developing event-driven microservices with event sourcing and CQRS (phillyete)Developing event-driven microservices with event sourcing and CQRS (phillyete)
Developing event-driven microservices with event sourcing and CQRS (phillyete)Chris Richardson
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design IntroductionTung Nguyen Thanh
 
A Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation SlidesA Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation Slidesthinkddd
 
Tactical DDD (just better OOP?) - PHPBenelux 2017
Tactical DDD (just better OOP?) - PHPBenelux 2017Tactical DDD (just better OOP?) - PHPBenelux 2017
Tactical DDD (just better OOP?) - PHPBenelux 2017Matthias Noback
 
Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .NetRichard Banks
 
The art of Software Design
The art of Software DesignThe art of Software Design
The art of Software DesignThomas Pierrain
 
Developing microservices with aggregates (devnexus2017)
Developing microservices with aggregates (devnexus2017)Developing microservices with aggregates (devnexus2017)
Developing microservices with aggregates (devnexus2017)Chris Richardson
 
DDD patterns that were not in the book
DDD patterns that were not in the bookDDD patterns that were not in the book
DDD patterns that were not in the bookCyrille Martraire
 

En vedette (13)

Modelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignModelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven Design
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Designing APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven DesignDesigning APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven Design
 
Why Domain-Driven Design and Reactive Programming?
Why Domain-Driven Design and Reactive Programming?Why Domain-Driven Design and Reactive Programming?
Why Domain-Driven Design and Reactive Programming?
 
Developing event-driven microservices with event sourcing and CQRS (phillyete)
Developing event-driven microservices with event sourcing and CQRS (phillyete)Developing event-driven microservices with event sourcing and CQRS (phillyete)
Developing event-driven microservices with event sourcing and CQRS (phillyete)
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 
A Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation SlidesA Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation Slides
 
Tactical DDD (just better OOP?) - PHPBenelux 2017
Tactical DDD (just better OOP?) - PHPBenelux 2017Tactical DDD (just better OOP?) - PHPBenelux 2017
Tactical DDD (just better OOP?) - PHPBenelux 2017
 
Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .Net
 
The art of Software Design
The art of Software DesignThe art of Software Design
The art of Software Design
 
Developing microservices with aggregates (devnexus2017)
Developing microservices with aggregates (devnexus2017)Developing microservices with aggregates (devnexus2017)
Developing microservices with aggregates (devnexus2017)
 
Php 100k
Php 100kPhp 100k
Php 100k
 
DDD patterns that were not in the book
DDD patterns that were not in the bookDDD patterns that were not in the book
DDD patterns that were not in the book
 

Similaire à Domain-Driven Design workshops

Domain Driven Development
Domain Driven DevelopmentDomain Driven Development
Domain Driven DevelopmentKonrad Russa
 
Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Adrian Kalbarczyk
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Mateusz Paprocki, PMP
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2intive
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Cezary Walenciuk
 
Project "Draw Me" -- Presentation
Project "Draw Me" -- PresentationProject "Draw Me" -- Presentation
Project "Draw Me" -- PresentationMichal_Zwierzyk
 
Intro do Domain Driven Design. ( PL )
Intro do Domain Driven Design. ( PL )Intro do Domain Driven Design. ( PL )
Intro do Domain Driven Design. ( PL )GOG.com dev team
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
Nie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówNie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówintive
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówMichal Lukaszewski
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieGrzegorz Godlewski
 
Wyboista droga do dobrego kodu. ...
Wyboista droga do dobrego kodu.                                              ...Wyboista droga do dobrego kodu.                                              ...
Wyboista droga do dobrego kodu. ...Future Processing
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?javOnet
 

Similaire à Domain-Driven Design workshops (20)

Domain Driven Development
Domain Driven DevelopmentDomain Driven Development
Domain Driven Development
 
Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Aplikacje internetowe (2010)
Aplikacje internetowe (2010)
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
DSP Forecasting wdi
DSP Forecasting wdiDSP Forecasting wdi
DSP Forecasting wdi
 
Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012
 
Project "Draw Me" -- Presentation
Project "Draw Me" -- PresentationProject "Draw Me" -- Presentation
Project "Draw Me" -- Presentation
 
Intro do Domain Driven Design. ( PL )
Intro do Domain Driven Design. ( PL )Intro do Domain Driven Design. ( PL )
Intro do Domain Driven Design. ( PL )
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Nie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówNie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistów
 
React Native by Artur Staszczyk
React Native by Artur StaszczykReact Native by Artur Staszczyk
React Native by Artur Staszczyk
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędów
 
Behat
BehatBehat
Behat
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecie
 
Wyboista droga do dobrego kodu. ...
Wyboista droga do dobrego kodu.                                              ...Wyboista droga do dobrego kodu.                                              ...
Wyboista droga do dobrego kodu. ...
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?
 

Domain-Driven Design workshops