2. Agenda
Dlaczego projektowanie dziedziny jest wa甜ne?
Czym r坦甜ni si od modelu anemicznego?
OO i OOP oraz SOA zamiast pisania procedur.
Ubiquitous Language.
Bounded Context.
Context Mapping i wzorce integracyjne.
Core Domain.
Architektura warstwowa i wzorce projektowe.
Dependency Injection oraz Aspect Oriented Programming.
3. Projektowanie dziedziny
Bardzo wa甜ne przy tworzeniu zorzonego
oprogramowania.
Obiektowy model dziedziny, posiada stan i
zachowanie.
Rozwizanie problem坦w zo甜onoci.
Modelowanie rozwizywanego problemu.
Odpowiedzialno we waciwym miejscu.
DRY
4. Model anemiczny dziedziny
Przeronita warstwa usug, zawiera ca logik
biznesow.
Trudna w utrzymaniu warstwa usug.
Degradacja warstwy dziedziny.
Przeniesienie korzyci na rzecz fasady.
Ograniczenie mo甜liwoci testowania modelu.
5. Programowanie zorientowane
obiektowo
OOP stworzone dla lepszego rozwizywania
problem坦w.
Zacierane przez niekt坦re technologie np. EJB, nie
ma obiekt坦w mamy np. encje, beany.
Wprowadzenie terminu POJO zwyke obiekty
jzyka Java.
Czsto obsuga logiki sprowadza si do pisania
kodu procedur.
6. Ubiquitous Language
Tworzony w czasie rozm坦w z klientem.
Wsp坦lny jzyk dla dziedziny, wynika z analizy.
Wsp坦lny jzyk projektu dla projektant坦w,
programist坦w zaczerpnity z 甜argonu wiata
rzeczywistego.
7. Zwizany kontekst
Ka甜dy model ma sw坦j kontekst.
Integralno modelu.
Jest logiczn ram rozwijanego modelu.
Pojedyczy model atwiej zarzdzany przez jeden
zesp坦.
Ka甜dy zwizany kontekst powinien mie nazw
ze wspolnego jzyka opisu.
9. Mapa kontekstu cd.
Shared Kernel
Customer-Supplier
Conformist
Separate Ways
Open Host Services
Anticorruption Layer
10. Mapa kontekstu cd.
Shared Kernel oraz Customre-Supplier to
wzorce dajace wysoki stopien interakcji pomiedzy
kontekstami.
Separate Way mo甜e by stosowany jeli chcemy
by konteks by odseparowany i rozwijany
oddzielnie.
Open Host Service oraz Anticorruption Layer
w przypadku interakcji z zewnetrznymi
systemami.
12. Mapa kontekstu cd.
Shared Kernel
Redukuje duplikacje, ale w dalszym cigu
utrzymuje odseparowane konteksty. Wymaga
uwagi gdy甜 r坦甜ne zespoy modyfikuj rdze.
Testy oraz Continuous Integration.
13. Mapa kontekstu cd.
Customer-Supplier
Jeli jeden podsystem zalerzy mocno od innego.
Rezultat procesu jest przekazywany do
podsystemu.
Zespoy s mocno zainteresowane wzajemn
relacj tworzonych podsystem坦w.
Dostawca powinien wspiera klienta.
14. Mapa kontekstu cd.
Conformist
Podobnie jak w przypadku wzorca Shared Kernel,
jednak bez mo甜liwoci dokonywania zmian.
Jeli u甜ywanykomponent ma zorzony interfejs,
u甜ywane w modelu jako wasny.
Jeli komponent ma niewielki interfejs, warto
zastanowi si nad adapterem do translacji
pomidzy naszym modelem a modelem z kt坦rego
komponent si wywodzi.
15. Mapa kontekstu cd.
Anticorruption Layer
Jeli integracja przez protok坦 komunikacyjny,
lub przez baz danych.
Brak informacji o modelu, dostpne s
prymitywne dane.
Istnieje ukryta semantyka danych.
Potrzeba izolacji modelu od systemu
zewntrznego.
16. Mapa kontekstu cd.
Anticorruption Layer
Warstwa komunikuje si z zewntrznym
modelem wykorzystujc zewntrzny jzyk.
Spenia form dwu kierunkowego translatora
pomidzy dziedzinami i jzykami.
Service jako fasada z zastosowaniem adaptera.
18. Mapa kontekstu cd.
Separate Ways
Jeli jest pewno 甜e mo甜na podzieli aplikacj na
kilka mniejszych niezale甜nych od siebie aplikacji.
19. Mapa kontekstu cd.
Open Host Service
Jeli podsystem ma si integrowa z r坦甜nymi
klientami i trzeba tworzy warstw translacji dla
ka甜dego.
Potrzeba utworzenia jednego protokou
komunikacji reprezentujcego prze添roczyst
grup usug.
21. Core Domain
Po pierwsze wyszukanie i zdefiniowanie g坦wnej
domeny projektu jako najbardziej priorytetowej.
Zaniedbania w tej czci mog sta si
katastrofalne dla systemu.
Podporzdkowanie innych czci jako wsparcie.
22. Core Domain cd.
Generic Subdomains
Istotne dla funkcionowania systemu i penego
wyra甜enia modelu.
Identyfikowanie sp坦jntch poddomen, kt坦re jednak
nie s motorem dziaania systemu.
Osadzanie w osobnych moduach.
23. Architektura warstwowa.
Interfejs u甜ytkownika - prezentacja i interpretacja polece
u甜ytkownika.
Warstwa aplikacji - koordynuje czynnoci aplikacji. Nie zawiera
logiki bienzsowej ani stanu obiekt坦w biznesowych. Zachowuje
stan zada.
Warstwa dziedziny serce aplikacji, zarzdza informacj o
dziedzinie. Stan obiekt坦w biznesowych. Utrwalanie obiekt坦w w
warstwie infrastruktury.
Warstwa infrastruktury jest wsparciem dla innych warstw.
Dostarcza komunikacj midzy warstwami, implementuje
utrwalanie obiekt坦w, zawiera dodatkowe wsparcie dla interfejsu
u甜ytkownika.
26. Wzorce projektowe cd.
Entities
Posiadaj to甜samo.
Nie zmieniaj stanu.
S to instancje trzymane w pamici.
Referencja spenia warunek to甜samoci.
Kombinacja unikalnych atrybut坦w.
Konieczny obiekt w modelu dziedziny.
27. Wzorce projektowe cd.
Value Objects
Nie posiada to甜samoci.
Wa甜ne s atrybuty.
Uatwia to tworzenie obiekt坦w i zwalnianie.
Powinny by immutable (tworzone przez
konstruktor i niemodyfikowalne).
Mog by wsp坦dzielone, zachowuj integralno
danych.
Mog zawiera inne obiekty VO lub referencje do
Entity.
28. Wzorce projektowe cd.
Services
Nie wszystkie aspekty domeny mog by
mapowane do obiekt坦w.
Jeli akcja nie jest w zasigu obiektu.
Nie posiada wewntrznego stanu.
Grupuje funkcionalno dla wielu obiekt坦w.
Interfejsy dostarczajce operacje wewntrz
konceptu dziedziny.
Operacje s bezstanowe.
29. Wzorce projektowe cd.
Aggregates
Nale甜y do cyklu 甜ycia obiektu domeny.
Okrela waciwoci obiektu i jego granice.
Asocjacje one-to-one, one-to-many, many-to-
many.
Bidirectional ale samochod ma silnik.
Aggregates posiada jednego roota Entity
(jedyny obiekt widziany z zewntrz)
30. Wzorce projektowe cd.
Factories
Tworz zorzone czasem struktury Encji I
Agregat坦w.
Proces musi by atomowy tak aby obiekty byy
we wasciwym stanie.
31. Wzorce projektowe cd.
Repositories
Baza danych jest czsci infrastruktury.
Mo甜e przetrzymywa referencje do obiekt坦w.
37. Literatura
Domain-Driven Design: Tackling Complexity in the
Heart of Software Eric Evans
Patterns of Enterprise Application Architecture
Martin Fowler
http://domaindrivendesign.org
http://martinfowler.com