Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Ports & Adapters

Architektura Ports & Adapters, Saga, Event Driven, DDD, Command
by

Sławek Sobótka

on 19 May 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Ports & Adapters

Sławomir Sobótka
slawomir.sobotka@bottega.com.pl
http://art-of-software.blogspot.com

http://ssepp.pl

Model Domeny
Logika Aplikacji
Piramida testów
Capability
Operations
Policy
Decission Support
Operational Level
Knowledge Level
Odzwierciedlenie stanu biznesu, zasobów
Potencjalne możliwości
Średnia podatność na zmiany
Odzwierciedlenie stanu biznesu, aktywności i planów
Aktualnie wykorzystane możliwości
Duża podatność na zmiany
Odzwierciedlenie celów i reguł (prawnych)
Strategie, ograniczenia
Średnia podatność na zmiany
Mechanizmy analityczne
"Inteligencja"
Mała podatność na zmiany
Przykładowa ilość
testów jednostkowych
(dla modelu domeny)
100 + 100 + 100 = 300
(Order)
(Invoice)
(BookKeeper)
Szacowana ilość
testów end2end
poprzez "wierzchnie powłoki"
100 * 100 * 100 = 1 000 000
(Order)
(Invoice)
(BookKeeper)
Supple Design
Order
BookKeeper
Invoice
<<Aggregate>>
<<Aggregate>>
<<Domain Service>>
Tax Policy
Domknięcie
operacji
<<Factory>>
<<Value Object>>
Immutable
functional
1% z tej liczby to wiciąż dużo
...ale który 1% ???
Ewolucyjna
Destylacja
Architektury

Myślenie wizualne na przykładzie architektury
Ports & Adapters

Sławomir Sobótka
Myślenie
Wizualne
Architektura Systemu
Architektura Aplikacji
Architektura
Ports & Adapters

Wewnętrzny model
Jak wyobrażasz sobie kod?
Jakich wewnętrznych reprezentacji używasz aby ogarnąć złożoność?
linijki kodu (kodowanie?)
narracja
struktury kodu (ekrany)
struktury danych
przepływ danych ("rurki")
przepływ sterowania ("flow")
struktury gemetryczne
kształty gemoetryczne w przestrzeni
ruch geometrii w przestrzeni (machiny)
...
3 poziomy zasobów
Building Blocks
słownik "klocków" dla lewej półkuli
zwijanie złożoności
hackowanie 7+-2
struktura porzadkujaca
tworzenie modeli dla
essential complexity
(np. czas)
...aby uniknac kuriozów
Poziom "świadomy"
Zbieranie, Ekspresja
Skupienie, logika, detale
Poziom "analizy"
Porządkowanie, odniesienie do posiadanej wiedzy
skupienie na wnętrzu, "wyłączenie się"
Poziom "przyjmowania"
Twórcze związki myślowe
Łatwe "wyłączanie się"
Całość sytuacji, przesłania, analogie, wyobrażenia
Przewodnik Stada
Akrobata Słowny
Żywe Srebro
Wędrujący Poszukiwacz
Wszędobylski Obserwator
Prezenter Gawędziarz
Słuch
Ruch
Wzrok
S
W
R
R
S
W
R
W
S
W
R
S
W
S
R
Modularność
failover
separacja Bounded Contexts
SOA Ready
strategia biznesowa "multiscreen"
Event Driven Architecture
skalowanie
responsywność
rozszerzalność
rodzaj Inversion of Control: utrata kontroli
Wewnętrzne reprezentacje
"foremki" dla wewnętrznych reprezentacji
W jakim celu tworzymy arch?
Kim będzie obiorca treści?
Podejście ewolucyjne
Tak, tak... ale jak!?!
proces oddolny
od przykładu do uogólnienia
w kontekście - po co?
potrzeba Building Blocks aby mieć "z czego" tworzyć
...lub zbytniego uogólnienia
Przyczyna wszelkiego zła w IT: Wielka Teoria Unifikacji
Micro Kernel
Pipes & Filters
Layers
Command-query Responsibility Segregation
źródło: E. Evans, Domain Driven Design, 2003
PORTS
ADAPTERS
Testability
KERNEL
Impl
implements
PurchaseApplicationService{
<<Interface>>
Usługi (API)
<<Interface>>
Odczyt Danych (API)
Modelowanie:
Use Case
User Story
Dostęp do ReadModel
<<Interface>>
Repository/DAO
Persystencja domeny
<<Interface>>
Infrastruktura
Usługi "techniczne"
<<Interface>>
Events Publisher
Zdarzenia asynchroniczne
Web App
Webservice
REST
JSON
Binary
Listener/
Receptor
Acceptance Scenario
Component Test
Command
+
Handler
<<Event>>
<<Event>>
<<DTO>>
ORM
JDBC
noSQL
Fake/Stub/Mock
JMS
...
Fake/Stub/Mock
WS
REST
Binary
...
Fake/Stub/Mock
<<Event>>
ADAPTERS
PORTS
KERNEL
<<Interface>>
Events Publisher
Zdarzenia asynchroniczne
<<Event>>
JMS
...
Fake/Stub/Mock
jednostkowe
integracyjne
komponentowe
systemowe
Penetracja Heksagonów
pod względem zakresu testu
Sales
Bounded Context
Payment
Bounded Context
Production
Bounded Context
Transport
Bounded Context
Saga
(model czasu)
Full transcript