+ All Categories
Home > Technology > Loosely Coupled Complexity - Unleash the power of your domain model

Loosely Coupled Complexity - Unleash the power of your domain model

Date post: 29-Oct-2014
Category:
Upload: francesca1980
View: 835 times
Download: 1 times
Share this document with a friend
Description:
Common software architectures are full of well-established assumptions. But some of them are flawed, no longer valid or relevant. Changing the rules of the game using DDD, CQRS and Event Sourcing can lead to systems which are more scalable, maintainable and performing. And which are fun to code as well.
Popular Tags:
78
Loosely Coupled Complexity Unleash the power of your Domain Model using CQRS & Event Sourcing [email protected] t
Transcript
Page 1: Loosely Coupled Complexity - Unleash the power of your domain model

Loosely Coupled Complexity

Loosely Coupled Complexity

Unleash the power of your Domain Model using CQRS & Event SourcingUnleash the power of your Domain Model using CQRS & Event Sourcing

[email protected]@avanscopertas.it

Page 2: Loosely Coupled Complexity - Unleash the power of your domain model

About meIn the IT field since ZX SpectrumGenerally in large scale projects (I might be biased)Freelance consultant: NotOnlyCodeTrainer (Freelance & Skills Matter + Zenika)Technical WriterBlogger: http://ziobrando.blogspot.comTwitter: ziobrando

My e-mail: [email protected]

Page 3: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini 2009

@avanscoperta

www.avanscoperta.it

avanscoperta.wordpress.com

[email protected]

@avanscoperta

www.avanscoperta.it

avanscoperta.wordpress.com

[email protected]

Page 4: Loosely Coupled Complexity - Unleash the power of your domain model

Questi 3 tipi hanno qualcosa di veramente interessante da dire...

Page 5: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Cosa c’è che non va?Cosa c’è che non va?

UIUIUIUIR

em

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Applic

ati

on S

erv

ices

Applic

ati

on S

erv

ices

Applic

ati

on S

erv

ices

Applic

ati

on S

erv

ices

DTODTODTODTO

DTODTODTODTO

OR

MO

RM

OR

MO

RM

Page 6: Loosely Coupled Complexity - Unleash the power of your domain model

niente

Page 7: Loosely Coupled Complexity - Unleash the power of your domain model

Thank [email protected]

http://ziobrando.blogspot.comtwitter: ziobrando

Page 8: Loosely Coupled Complexity - Unleash the power of your domain model

- Quale gobba?

Page 9: Loosely Coupled Complexity - Unleash the power of your domain model

Quante assunzioni stanno guidando le nostre decisioni?

Page 10: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Proviamo ancora...Proviamo ancora...

UIUIUIUIR

em

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Applic

ati

on S

erv

ices

Applic

ati

on S

erv

ices

Applic

ati

on S

erv

ices

Applic

ati

on S

erv

ices

DTODTODTODTO

DTODTODTODTO

OR

MO

RM

OR

MO

RM

Page 11: Loosely Coupled Complexity - Unleash the power of your domain model

Anaemic Domain Model

i DTO?

Ottimizzazione query su ORM

Tempo di sviluppo

Testabilità

...

Page 12: Loosely Coupled Complexity - Unleash the power of your domain model

Abbiamo veramente bisogno di...

un Domain Model?

un Database?

transazioni?

un Object Relational Mapper?

DTO?

Page 13: Loosely Coupled Complexity - Unleash the power of your domain model

Anaemic Domain Model

Page 14: Loosely Coupled Complexity - Unleash the power of your domain model

Non tutti i regali sono necessariamente

graditi...

Non tutti i regali sono necessariamente

graditi...

Page 15: Loosely Coupled Complexity - Unleash the power of your domain model

Vantaggi dell’Anaemic Domain Model

1) Il codice business è localizzato in un solo posto:Più facile da leggere per sviluppatori giovani non familiari con OOP.

Spiacente ...non c’è il numero 2 :-(

Page 16: Loosely Coupled Complexity - Unleash the power of your domain model

Svantaggi dell’Anemic Domain Model

Triste come un pasto in ospedale

Triste come un pasto in ospedale

difficile da mateneredifficile da testare

alimenta la duplicazione

difficile da mateneredifficile da testare

alimenta la duplicazione

Page 17: Loosely Coupled Complexity - Unleash the power of your domain model

avanscoperta

Progettate la vistra applicazione partendo dal data model

Create il vostro domain model via reverse engineering

Dichiarate di fare TDD e cominciate a testare le vostre classi di dominio

In particolare i getter ed i setters

Quindi, testate la logica con i test d’Integrazione, ed impantanatevi con i dati di test.

Dichiarate ufficialmente che TDD non porta alcun vantaggio e che vi fa solo rallentare.

Commentate i tests nel vostro script di Build - Continuous Integration

Continuate a lamentarvi

Come farsi del male da soliCome farsi del male da soli

Page 18: Loosely Coupled Complexity - Unleash the power of your domain model

Non farò più il reverse engineering del data model per creare un domain model

Page 19: Loosely Coupled Complexity - Unleash the power of your domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Page 20: Loosely Coupled Complexity - Unleash the power of your domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Page 21: Loosely Coupled Complexity - Unleash the power of your domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Page 22: Loosely Coupled Complexity - Unleash the power of your domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Page 23: Loosely Coupled Complexity - Unleash the power of your domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Non farò più il reverse engineering del data model per creare un domain model

Page 24: Loosely Coupled Complexity - Unleash the power of your domain model

Come dovremmo implementare un Domain Model?

Fate in modo che il codice parli lo Ubiquitous Language

Proteggete il vostro modello con dei Bounded Contexts

Usate gli Aggregati come unità di consistenza nel vostro domain model

Il comportamento dovrebbe risiedere nel Domain Model

Page 25: Loosely Coupled Complexity - Unleash the power of your domain model

Anemic Domain Model

Page 26: Loosely Coupled Complexity - Unleash the power of your domain model

Rich domain modelRich domain model

Page 27: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

TDD e DDDTDD e DDDRiscritture frequentiRiscritture frequenti

Exploratory codingExploratory coding

Domain Objects minimali

Domain Objects minimali

Focus sugli Unit TestsFocus sugli Unit Tests

Tiny Domain ObjectsTiny Domain Objects

Tiny Domain ObjectsTiny Domain Objects

Cicli corti e frequenti

Cicli corti e frequenti

Codice autoesplicativoCodice autoesplicativo

Feedback rapidoFeedback rapido

Libertà di cambiareLibertà di cambiare

Page 28: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Aggregate

Un gruppo di oggetti naturalmente viciniUnità di consistenza nel domain model

modificati nella stessa transazionecancellati insiemetrasferiti insieme

Page 29: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Aggregati multipli

Page 30: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Ma la duplicazione non era il male?

Ma la duplicazione non era il male?

- Se pensiamo ai “dati” allora ...c’è duplicazione

- Se pensiamo al “comportamento” allora alcuni oggetti

non sono la stessa cosa

- stabilire i confini degli aggregati rende il nostro sistema

- strettamente consistente all’interno degli aggregate boundaries

- eventualmente consistente al di fuori dei confini dell’aggregato

Page 31: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Alla fine è piuttosto semplice

Page 32: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Perchè complicarsi la vita?

Page 33: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Una volta che l’accoppiamento tra gli aggregati è ridotto... potrei anche pensare di scegliere una strategia di persistenza differente per ogni aggregato...

Hmm...Hmm...

Page 34: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

dalla cara vecchia architettura...

dalla cara vecchia architettura...

UIUIUIUIR

em

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Applic

ati

on S

erv

ices

Applic

ati

on S

erv

ices

Applic

ati

on S

erv

ices

Applic

ati

on S

erv

ices

DTODTODTODTO

DTODTODTODTO

OR

MO

RM

OR

MO

RM

Page 35: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

UIUIUIUIR

em

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

DTODTODTODTO

DTODTODTODTO

OR

MO

RM

OR

MO

RM

La visione DDD classica

La visione DDD classica

boundbounded ed contex

contextsts

boundbounded ed contex

contextsts

aggregat

aggregate e boundari

boundarieses

aggregat

aggregate e boundari

boundariesesthin thin

application

application layerlayer

thin thin

application

application layerlayer

Page 36: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Portiamo i Domain Objects alla UI?

Portiamo i Domain Objects alla UI?

- I DTO non piacciono a nessuno...

- Alcuni tool lo permettono! (hey, c’è una camicia hawaiana in regalo!!)

- Il delirio della validazione

- Gli oggetti a 2 stati

- la tentazione del Framework

Page 37: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Come implementereste queste?

Come implementereste queste?

As aAs a Marketing Office Marketing OfficeI want toI want to assign discount assign discount points to customer on points to customer on every purchaseevery purchaseIn order toIn order to enable more enable more deals in the futuredeals in the future

As aAs a Marketing Office Marketing OfficeI want toI want to assign discount assign discount points to customer on points to customer on every purchaseevery purchaseIn order toIn order to enable more enable more deals in the futuredeals in the future

As aAs a Sales Office Sales OfficeI want toI want to ship order on ship order on purchase commandpurchase commandIn order toIn order to deliver deliver purchased goods to the purchased goods to the customercustomer

As aAs a Sales Office Sales OfficeI want toI want to ship order on ship order on purchase commandpurchase commandIn order toIn order to deliver deliver purchased goods to the purchased goods to the customercustomer

Page 38: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Eventi e coordinamento fra aggregati

Eventi e coordinamento fra aggregati

- Operazione che coinvolgono più aggregati non dovrebbero essere nella stessa Unit of Work

- La comunicazione fra aggregati è intrisecamente asincrona

- Domain Events come meccanismo di comunicazione

- dall’esterno

- fra aggregati

Page 39: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Domain EventDomain Event

- nello Ubiquitous Language, sono Azioni Completate: verbi al passato.

Page 40: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Rispondere asincronamente agli eventi

Rispondere asincronamente agli eventi

- Non dimentichiamo: il legame vero tra le azioni è definito dal business!!!

Page 41: Loosely Coupled Complexity - Unleash the power of your domain model

a qualcuno ricorda SOA?

...proviamo a disegnare le cose diversamente e

pensare alla “granularità dei servizi”

Page 42: Loosely Coupled Complexity - Unleash the power of your domain model

Command/Query Responsibility Segregation

Command/Query Responsibility Segregation

Page 43: Loosely Coupled Complexity - Unleash the power of your domain model
Page 44: Loosely Coupled Complexity - Unleash the power of your domain model

perché trovare un compromesso?

Page 45: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

Partendo dal piccolo...Partendo dal piccolo...

- Command/Query Separation era un principio OOD incluso in DDD- accessors non dovrebbero avere side

effects

- mutators non dovrebbero ritornare un valore - (con ll’eccezione di this in alcuni casi)

Page 46: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

!Di solito indirizzati ad entità singoleil comportamento è importante la Flessibilità è importante

Command

Page 47: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

?Grosse quantità di datiNon c’è comportamentole Prestazioni sono importantiDisponibili numerosi componenti off-the shelf

Query

Page 48: Loosely Coupled Complexity - Unleash the power of your domain model

?

!UIUIUIUI

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

DTODTODTODTO

DTODTODTODTO

OR

MO

RM

OR

MO

RM

da questo...da questo...

Page 49: Loosely Coupled Complexity - Unleash the power of your domain model

?

!UIUIUIUI

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

OR

MO

RM

OR

MO

RM

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Thin

Read

Layer

Thin

Read

Layer

Thin

Read

Layer

Thin

Read

Layer

DTODTODTODTO

DTODTODTODTO

...a questo

...a questo

Page 50: Loosely Coupled Complexity - Unleash the power of your domain model

?

!Un percorso separato per

comandi inviati al Domain Model

Un percorso separato per recuperare Dati

Page 51: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

? QueryingQuerying-Date un’occhiata ai vostri

utenti, cosa interessa loro veramente?

-Non è cercare, è trovare

-Non è il refresh, stanno cercando eventi

Page 52: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

? StalenessStaleness- È veramente un problema?

- Importa veramente se i dati sono...

- di 20 secondi fa?

- O di 10 minuti?

- ... chi siamo noi per decidere questa cosa?

- ... puoi tenere sincronizzata una stampa?

- o un PowerPoint?

Page 53: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

? Sono solo datiSono solo dati

- Non c’è comportamento in quello che vediamo.

- Abbiamo veramente bisogno di oggetti?

Page 54: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

? Query-Only ArchitectureQuery-Only Architecture

- Sono solo dati: no comportamento...

- => perché non andare dritti sul database?

- Non c’è accoppiamento tra le schermate della UI...

- => Abbiamo veramente bisogno della referential integrity?

- => Perché non usare una table-per-UI-view strategy, calcolata in background?

- Cosa stiamo già facendo con il search model e con la cache?

Page 55: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

? Anche i dati stale possono

Anche i dati stale possono

- ... fornire informazioni utili per la validazione preliminare dei comandi

- => meno comandi che falliscono

Page 56: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! ...meno comandi che falliscono

...meno comandi che falliscono

- Se la maggio parte dei nostri comandi avrà successo...

- ... c’è veramente bisogno di rispondere immediatamente o sullo stesso canale?

- Perché non qualcosa come: “Thank you for your order, your confirmation e-mail will arrive shortly”?

Page 57: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! Catturare le intenzioni dell’utente

Catturare le intenzioni dell’utente

- Sappiamo realmente cosa l’utente vuole fare con la nostra applicazione?

- Stiamo realmente supportando i nostri utenti?

- Chi si sta facendo carico della complessità?

- ... non possiamo fare qualcosa di più intelligente che semplicemente mostrare dati grezzi?

- ...un sacco di carico sul versante dati è sostanzialmente inutile

Page 58: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! Commands != Entities

Commands != Entities

- Non c’è molto in comune...

- per quale motivo devo mostrarle all’utente?

Page 59: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! Write-only modelWrite-only model- Il domain model non è usato per recuperare o

mostrare dati.

- Le relazioni tra entità orientate al recupero dei dati ... non sono più necessarie

- Il Domain Model è sempre in uno stato consistente (dalla Factory alla Garbage Collection)

- Non è necessaria la validazione sul Domain Model (comandi sono validati prima)

- Testare il Domain Model diventa ancora più semplice

Page 60: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! Persisting the modelPersisting the model

- Abbiamo veramente bisogno di rendere persistenti tutti i dati?

- Abbiamo veramente bisogno di renderli persistenti su un supporto Relazionale?

- (ricordate, non stiamo facendo query sul modello...)

Page 61: Loosely Coupled Complexity - Unleash the power of your domain model

?

!UIUIUIUI

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

OR

MO

RM

OR

MO

RM

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Thin

Read

Layer

Thin

Read

Layer

Thin

Read

Layer

Thin

Read

Layer

DTODTODTODTO

CommandCommandss

CommandCommandss

Page 62: Loosely Coupled Complexity - Unleash the power of your domain model

?

!UIUIUIUI

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

OR

M?

OR

M?

OR

M?

OR

M?

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Thin

Read

Layer

Thin

Read

Layer

Thin

Read

Layer

Thin

Read

Layer

DTODTODTODTO

voilàvoilà

publish publish subscribesubscribepublish publish

subscribesubscribeSpecialized

Specialized

data model

data model

Specialized

Specialized

data model

data model

does it really

does it really

need to be

need to be relational?

relational?

does it really

does it really

need to be

need to be relational?

relational?

CommandCommandss

CommandCommandss

Eventu

all

Eventu

all

yyEventu

all

Eventu

all

yy

Page 63: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! un interessante side effect

un interessante side effect- ... meno collections ...

- => meno impatto sulla memoria

- => meno Garbage Collection

- su alcuni sistemi, il Domain Model è sempre disponibile

Page 64: Loosely Coupled Complexity - Unleash the power of your domain model

The paper-based system

Molti tipi di azienda nascono prima dei computersLe transazioni non sono un problema bisinessI Dati possono essere disallineati...capitaCHIEDIAMO al Business

Molti tipi di azienda nascono prima dei computersLe transazioni non sono un problema bisinessI Dati possono essere disallineati...capitaCHIEDIAMO al Business

Page 65: Loosely Coupled Complexity - Unleash the power of your domain model

Event SourcingEvent Sourcing

Page 66: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! Quindi ...cosa fa il nostro Domain Model?

Quindi ...cosa fa il nostro Domain Model?

- fondamentalmente risponde a messaggi autocontenuti provenienti dall’esterno...

- eventi dalla UI o da sorgenti esterne

Page 67: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! La singola sorgente di verità

La singola sorgente di verità

- Un tempo era la carta...

- ora sono gli Eventi

Page 68: Loosely Coupled Complexity - Unleash the power of your domain model

?

!UIUIUIUI

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

Ap

plic

ati

on S

erv

ices

OR

M ?

OR

M ?

OR

M ?

OR

M ?

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Rem

ote

faca

de

Thin

Read

Layer

Thin

Read

Layer

Thin

Read

Layer

Thin

Read

Layer

DTODTODTODTO

voilàvoilà

publish publish subscribesubscribepublish publish

subscribesubscribe

EventsEventsEventsEvents Events

Events

Events

Events

Page 69: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! Dobbiamo tenere lo stato nelle Entities?

Dobbiamo tenere lo stato nelle Entities?

- Abbiamo tutte le informazioni necessarie nella Event Queue

- SINGLE SOURCE of TRUTH

- Cos’è un Aggregato? qualcosa che cambia il suo stato in risposta ad eventi

- ...secondo il nostro livello attuale di comprensione del sistema

Page 70: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! Aggregati ed eventiAggregati ed eventi

Gli aggregati tengono traccia degli eventi e derivano il proprio comportamento di conseguenza

Page 71: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

! Che succede se...Che succede se...- deriviamo lo stato degli Aggregati dalla

sequenza degli eventi che sono avvenuti in un sistema?

- => Possiamo avere feaures retroattive...

- => Possiamo rispondere SI ad un sacco di richieste strane/interessanti che arrivano dal business.

- => Riprodurre bug?

Page 72: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

!

Page 73: Loosely Coupled Complexity - Unleash the power of your domain model

Gli aggregati disaccoppiati permettono semplificazioni nello sviluppo

Gli aggregati disaccoppiati permettono semplificazioni nello sviluppo

La terra delle opportunitàLa terra delle opportunità

Polyglot persistencePolyglot persistence

migliore scalabilitàmigliore scalabilità

Polyglot persistencePolyglot persistencePolyglot persistence

SOA indoloreSOA indolore

Applicazioni riavvolgibiliApplicazioni riavvolgibili

Page 74: Loosely Coupled Complexity - Unleash the power of your domain model

Una cosa alla voltaNon è detto che abbiate

bisogno di tuttoOgni step è un miglioramento

Anche in piccole architetture

...Mettiamo in discussione

un’assunzione alla volta

Page 75: Loosely Coupled Complexity - Unleash the power of your domain model
Page 76: Loosely Coupled Complexity - Unleash the power of your domain model
Page 77: Loosely Coupled Complexity - Unleash the power of your domain model

© Alberto Brandolini - 2010

ReferencesReferenceshttp://groups.google.com/group/dddcqrs

http://cqrs.wordpress.com/

http://www.infoq.com/interviews/Architecture-Eric-Evans-Interviews-Greg-Young

http://www.udidahan.com/2009/12/09/clarified-cqrs/

http://www.infoq.com/presentations/Command-Query-Responsibility-Segregation

http://www.infoq.com/presentations/SOA-Business-Autonomous-Components

http://martinfowler.com/eaaDev/EventSourcing.html

http://skillsmatter.com/podcast/design-architecture/architectural-innovation-eventing-event-sourcing

Page 78: Loosely Coupled Complexity - Unleash the power of your domain model

Thank [email protected]

http://ziobrando.blogspot.comtwitter: ziobrando


Recommended