utile e sostenibile

37
utile e sostenibile L'architettura di un'applicazione in un mondo basato su servizi: cosa fare e cosa non fare

Upload: mauro-servienti

Post on 06-Dec-2014

442 views

Category:

Technology


0 download

DESCRIPTION

Talk at Xe.Net

TRANSCRIPT

Page 1: Utile e sostenibile

utile e sostenibile

L'architettura di un'applicazione in un mondo basato su servizi: cosa fare e cosa non fare

Page 2: Utile e sostenibile

Who’s Mauro?

Mauro ServientiMicrosoft MVP - Visual C#

Qualcuno sostiene che io sia un «architetto»in realtà ci provo e basta …quindi sempre «mason» sono…che poi…c’è anche qualcuno che sostiene che gli architetti non esistono…

//[email protected]

Appassionato di: ALM e metodologie agili

Page 3: Utile e sostenibile

Avviso ai naviganti

• È un mondo «nuovo» anche per il sottoscritto– Lo stile della presentazione non la ciccia…in parte anche la

ciccia :-)

• Tutto quello che dirò a prescindere da come lo dirò sono un set di linee guida non la verità assoluta, linee guida che devono essere calate nel contesto del progetto;– Insomma…non sono il dottore :-P

• Attenti al simbolino del «take away»:

Page 4: Utile e sostenibile

Agenda…? :-)

• Verità e Assiomi (…pretenzioso l’amico);• Perché mai un servizio?• A-to-mi-co;• Il bagaglio…per un viaggio;• …un viaggio specifico;

Page 5: Utile e sostenibile

• i servizi si usano se servono non perché fa figo;– Questa è molto minimal…;

• l’atomicità deve essere garantita sempre, magari non si può parlare di transazioni, ma l’atomicità (anche apparente) delle operazioni ci deve essere sempre;– Il driver è il bisogno del nostro utente;

• ogni volta che attraversate un confine c’è un costo notevole valutate bene cosa portate con voi;– Lo stige è un viaggio senza ritorno… :-)

• cercare di essere vagamente generici (ad esempio esponendo in maniera banale la CRUD) non serve a nulla;– Provate a chiedere all’ufficio postale se vi cerca un indirizzo…

Page 6: Utile e sostenibile

Vi ricorda qualcosa?• Boundaries are Explicit– Viaggiando attraversate dei confini…ben noti;

• Service compatibility is determined based on policy:– Quando chiedete qualcosa a qualcuno sapete cosa

chiedere oppure sapete cosa chiedere per sapere cosa chiedere… :-)

• Services share schema and contract, not class – …non mi viene un esempio… :-/

• Services are Autonomous:– Se sostituite l’impeigato allo sportello cosa cambia?

Page 7: Utile e sostenibile

Agenda…? :-)

• Verità e Assiomi (…pretenzioso l’amico);• Perché mai un servizio?• A-to-mi-co;• Il bagaglio…per un viaggio;• …un viaggio specifico;

Page 8: Utile e sostenibile

Security/policyil front-end non deve poter accedere alla base dati;

Page 9: Utile e sostenibile

Più di un’applicazione fruisce dei nostri dati;

Page 10: Utile e sostenibile

Dobbiamo poter scalare orizzontalmente(ed è costoso e/o complesso scalare orizzontalmente un

database)

Page 11: Utile e sostenibile

Dobbiamo aggregare fonti dati eterogenee al fine di renderle fruibili a diverse applicazioni senza spalmare su ogni applicazione la complessità dell’aggregazione

Page 12: Utile e sostenibile

Motivi e Bisogni

…e bla bla bla…

sicuramente ci sono una montagna di buonissimi

motivi…

Page 13: Utile e sostenibile

Agenda…? :-)

• Verità e Assiomi (…pretenzioso l’amico);• Perché mai un servizio?• A-to-mi-co;• Il bagaglio…per un viaggio;• …un viaggio specifico;

Page 14: Utile e sostenibile

A-to-mi-co…

• L’utente ha il suo concetto di atomicità;

• Il modello mentale dell’utente è sacro;

• Ogni volta che si attraversa un confine le transazioni sono il male;

Page 15: Utile e sostenibile

Quindi?!?!?!

Nel modello mentale dell’utente le transazioni non esistono;

Non si può appendere un quadro in transazione…

Page 16: Utile e sostenibile

the user-mental-model way (1)

• compensazione:1. Ciò che non ha effetti collaterali (abbandono);2. Ciò che è cancellabile in maniera definitiva;3. Ciò che è per forza transazionale (orticello);

• Preparo tutti i documenti per la pratica edilizia;• Avvio la richiesta della pratica edilizia;• …non trovo nulla che debba essere «transazionale»;

Take away

Page 17: Utile e sostenibile

the user-mental-model way (2)

• messaggio & fotografia;1. Inserisco un’operazione;2. Inserisco un’operazione contraria;3. Faccio una fotografia, cancello le operazioni fatte

(se serve) e ricomincio;

• La contabilità funziona così…da sempre;

Take away

Page 18: Utile e sostenibile

…and least but not last…

IdempotenzaSe cercate di ripresentare la stessa pratica

edilizia più volte non è che vi costruiscono più case…

Take away

Page 19: Utile e sostenibile

…la cruda realtà…

Le transazioni servono perché abbiamo a che fare con un database relazionale la cui struttura dei dati ha un’atomicità molto diversa (e spesso

obbligata) dal modello mentale dell’utente.

Questo ci porta, da pigri, a giovare delle transazioni…anche fuori dall’orticello.

Page 20: Utile e sostenibile

Agenda…? :-)

• Verità e Assiomi (…pretenzioso l’amico);• Perché mai un servizio?• A-to-mi-co;• Il bagaglio…per un viaggio;• …un viaggio specifico;

Page 21: Utile e sostenibile

è tutto in dipendenza del viaggio…

Credo sia chiaro a tutti che sono sciatori….

Page 22: Utile e sostenibile

Quanti viaggi ci sono?

Page 23: Utile e sostenibile

Avrebbe senso lo stesso bagaglio?

Page 24: Utile e sostenibile

Aggregate…che non vuol dire aggregate

• I confini devono essere netti, altrimenti le spezie si mischiano;

• Ci sono delle spezie che sono il risultato di un mix…ma sono delle nuove spezie diverse;

• Brutalmente detto significa che avete più rappresentazioni dello stesso dato per «use case» diversi…ma è veramente lo stesso dato?

Take away

Page 25: Utile e sostenibile

Agenda…? :-)

• Verità e Assiomi (…pretenzioso l’amico);• Perché mai un servizio?• A-to-mi-co;• Il bagaglio…per un viaggio;• …un viaggio specifico;

Page 26: Utile e sostenibile

…un viaggio specifico

Ho detto sciatori?….scusate intendevo alpinisti.

Page 27: Utile e sostenibile

Produrreste mai questo?

Page 28: Utile e sostenibile

Allora perché fate questo?

public interface IApplicationService {

void Save( DomainEntity entity );}

Che cosa manca di fondamentale?

Page 29: Utile e sostenibile

It’s all about state

what

how

Page 30: Utile e sostenibile

criminal intent

• Cosa, Perché e Come rappresentano le intenzioni;

• Save( Object ) non dichiara nulla delle intenzioni, o magari non dichiara abbastanza;

• ChangeCustomerAddress è molto più esplicativo;

• La generalizzazione porta inevitabilmente alla perdita di controllo;

• I contratti di un servizio sono il posto sbagliato per generalizzare altrimenti finite con il chiedere l’indirizzo al postino;

Take away

Page 31: Utile e sostenibile

…a meno che…

Piccolo spazio pubblicità…«messaggi»

Page 32: Utile e sostenibile

…è un mondo dificile…

«duale»

Page 33: Utile e sostenibile

duale: lettura

• la “catena” delle operazioni che portano il dato a chi ne ha bisogno, nella forma in cui ne ha bisogno, deve essere il più corta possibile;

• Più la catena è lunga più si tende a generalizzare:– Limiti: che portano a sacrificare la qualità a

favore dei costi;– Con i servizi i costi sono già alti quindi

sacrificare è solo controproducente;– l’unica cosa che ha molto senso inserire

nella pipeline di lettura è la security; Take away

Page 34: Utile e sostenibile

duale: scrittura• La scrittura ha molto senso che segua una

strada diversa, con servizi diversi;– Con tutta la «pipeline» che serve;

• Fondamentale, in scrittura, è cambiare punto di vista, non più in termini di “salva questo grafo di oggetti” ma in termini di “porta il tuo (del servizio) grafo dallo stato in cui è a questo nuovo stato”;– CQRS e Event Sourcing;

• Snapshop e ChangeSet– abbiamo una situazione nota (uno Snapshot) e

dato un set di modifiche (ChangeSet) vogliamo passare ad una nuova situazione nota;

Take away

Page 35: Utile e sostenibile

2 aggregate…?!?!?…per una cosa sola…!!!

Page 36: Utile e sostenibile

per l’utente è uno solo

• Costa? moltissimo;– Skill;– Codice, tanto codice (ma noi

abbiamo i tool);• Costa? pochissimo;– Sul medio-lungo termine;– È molto più manutenibile;– È molto più flessibile;

Take away

Page 37: Utile e sostenibile

Welcome to the DDD World.

Andiamo a mangiare…

Domande?