Domain-Driven Design workshops

29
Domain-Driven Design Jak stworzyć aplikację używając DDD Mariusz Kopylec

Transcript of Domain-Driven Design workshops

Page 1: Domain-Driven Design workshops

Domain-Driven DesignJak stworzyć aplikację używając DDD

Mariusz Kopylec

Page 2: Domain-Driven Design workshops

Domena

Dziedzina, w obrębie której budowane jest rozwiązanie zadanego problemu.

Page 3: Domain-Driven Design workshops

Domena

Problem

• Operacje arytmetyczne

• Implementacja aplikacji Java

• Projektowanie aplikacji

Domena

• Liczby rzeczywiste

• JDK

• „Wspólny język”

Page 4: Domain-Driven Design workshops

Domena: wspólny język

• Role: ekspert domenowy, programista

• Ustalony słownik pojęć

• Narzędzie do opisu działania aplikacji

Page 5: Domain-Driven Design workshops

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.

Page 6: Domain-Driven Design workshops

Domena

Reprezentacją domeny w kodzie źródłowym jest model.

Page 7: Domain-Driven Design workshops

Architektura

INTERFEJS UŻYTKOWNIKA

LOGIKA APLIKACJI

MODEL

INFR

AST

RU

KTU

RA

Page 8: Domain-Driven Design workshops

Interfejs użytkownika

Odpowiedzialny za interakcje z użytkownikiem.

Page 9: Domain-Driven Design workshops

Interfejs użytkownika

• Graficzny interfejs użytkownika

• Strona internetowa

Page 10: Domain-Driven Design workshops

Logika aplikacji

Definiuje funkcjonalności (przypadki użycia).

Page 11: Domain-Driven Design workshops

Logika aplikacji

• Serwis aplikacyjny

• Kontrakt z serwisem infrastrukturalnym

Page 12: Domain-Driven Design workshops

Serwis aplikacyjny

• Metoda = przypadek użycia

• Operuje na modelu

• Bezstanowy

Page 13: Domain-Driven Design workshops

Kontrakt z serwisem infrastrukturalnym

• Definiuje funkcjonalności pomocnicze

• Interfejs

Page 14: Domain-Driven Design workshops

Model

Klocki, z których budujemy funkcjonalności.

Składa się z Domain Building Blocks.

Page 15: Domain-Driven Design workshops

Model

• Agregat: encja, value object

• Serwis domenowy

• Fabryka

• Repozytorium

• Zdarzenie domenowe

• Polityka

Page 16: Domain-Driven Design workshops

Agregat

• Podstawowa jednostka operacyjna

• Powiązane encje i value objecty

• Jeden punkt wejściowy – korzeń

• Zawsze w prawidłowym stanie

Page 17: Domain-Driven Design workshops

Agregat: encja

• Unikalne ID

• Mutowalna

• Nieanemiczna

Page 18: Domain-Driven Design workshops

Agregat: value object

• Brak unikalnego pola

• Niemutowalny

• Typ złożony

Page 19: Domain-Driven Design workshops

Serwis domenowy

• Zachowanie logicznie nie pasujące do żadnej encji

• Proces wywodzący się ze „wspólnego języka”

• Bezstanowy

• Może być interfejsem

Page 20: Domain-Driven Design workshops

Fabryka

• Tworzy agregaty

• Ogranicza sposoby tworzenia agregatu

• Wyciąga złożoną logikę z konstruktorów

Page 21: Domain-Driven Design workshops

Repozytorium

• Zarządza utrwalaniem agregatów

• Interfejs

Page 22: Domain-Driven Design workshops

Zdarzenie domenowe

• Oddziela model od innych warstw

• Konsumowane w innych warstwach

Page 23: Domain-Driven Design workshops

Polityka

• Odzwierciedla wykonanie jednej operacji na kilka sposobów

• Wzorzec projektowy: Strategia

Page 24: Domain-Driven Design workshops

Infrastruktura

Warstwa pomocnicza dla pozostałych warstw.

Page 25: Domain-Driven Design workshops

Infrastruktura

• Serwis infrastrukturalny

• Implementacja repozytorium

Page 26: Domain-Driven Design workshops

Serwis infrastrukturalny

• Spełnia kontrakt zdefiniowany w innych warstwach

• Bezstanowy

Page 27: Domain-Driven Design workshops

Implementacja repozytorium

• Spełnia kontrakt zdefiniowany przez repozytorium

• Określa sposób utrwalania agregatów

• Bezstanowa

Page 28: Domain-Driven Design workshops

Zasady pisania kodu

• Brak łączonych metod na agregacie

• Warunki w osobnych metodach

• „Fail fast”

• Dobrze nazwane klasy i metody

• Dostępność ograniczona do minimum

Page 29: Domain-Driven Design workshops

Zapamiętaj!

Agregat != Tabela