Domain-Driven Design workshops

Post on 14-Apr-2017

143 views 2 download

Transcript of Domain-Driven Design workshops

Domain-Driven DesignJak 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

INFR

AST

RU

KTU

RA

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