dal requisito all'implementazione @ cd2010
DESCRIPTION
Dal requisito all'implementazione @ CD2010TRANSCRIPT
![Page 1: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/1.jpg)
Dal requisito all'implementazione
6 scenari «real world» e 6 soluzioni architetturali
![Page 2: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/2.jpg)
Who we are
Gian Maria Ricci
Libero professionista @ me
Microsoft MVP Visual Studio ALM
Blog: http://www.codewrecks.com
Blog: http://blogs.ugidotnet.org/rgm
Mauro Servienti
Senior Software Architect @ Gaia
Microsoft MVP Visual C# / MCTS
Blog: http://milestone.topics.it
![Page 3: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/3.jpg)
Gli Scenari
• Interazione Uomo - Macchina;• Messaging over WCF;• Creazione dinamica di Proxy WCF;• Introducing I.o.C. in Web Forms;• Audit dei dati;• Query Specification vs Repository;
![Page 4: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/4.jpg)
INTERAZIONE UOMO - MACCHINA
Welcome to the machine…
![Page 5: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/5.jpg)
Scenario• Il nostro software deve gestire gli
input/output di un macchinario;
• Tutte le logiche applicative sono fatte nel
software, il macchinario ha solo bottoni, leve e segnalatori luminosi;
![Page 6: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/6.jpg)
Requirements• Il software dialoga con un macchinario su
cui opera un utente;• Il Product Owner vuole come requisito la
possibilità di nominare uno o più «Domain Expert» che dovranno testare le logiche che guidano la macchina;
• Il product owner vorrebbe automatizzare alcuni dei test che verificano le nostre logiche;
![Page 7: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/7.jpg)
Solution• La soluzione migliore è quella di
disaccoppiare l’accesso all’hardware tramite logica «plugin»;
• In questo modo le logiche applicative dipendono da una IMachine la quale comunica con un IHardwareController;
• In questo modo è possibile realizzare una interfaccia che simula la macchina e quindi usare MTM e Coded UI Test;
![Page 8: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/8.jpg)
Schema di funzionamento
![Page 9: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/9.jpg)
DEMOInterazione Uomo - Macchina
![Page 10: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/10.jpg)
MESSAGING OVER WCFThe Postman always rings twice…
![Page 11: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/11.jpg)
Scenario
• Migrazione di un’applicazione a plug-in Windows Forms esistente;
• Applicazione LOB Silverlight e back-end basato su servizi WCF;
![Page 12: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/12.jpg)
Requirements
• Supporto per un sistema a plug-in:– server side e client side;– Serializzazione e/o Parallelizzazione;
• Supporto per installazioni in configurazioni diverse;
• Supporto per versioning «non sincrono»;
![Page 13: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/13.jpg)
Solution
• Sfruttare la vera natura di WCF: i messaggi;
• Il server espone solo due metodi:– void Broadcast( OneWayOperation );– Response Dispatch( TwoWayOperation );
• Client-side e Server-side «iniettiamo» «Messagge(s)» e «MessageHandler(s)»;
![Page 14: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/14.jpg)
DEMOMessaging over WCF
![Page 15: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/15.jpg)
CREAZIONE DINAMICA DI PROXY WCF
Sfruttiamo Castle.Windsor per aumentare la flessibilità di comunicazione
![Page 16: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/16.jpg)
Scenario
• Applicativo WCF/Winform/Desktop che viene utilizzato internamente da una ditta con accesso al database locale;
• Lo stesso software può essere dato in uso a clienti esterni che non hanno chiaramente accesso diretto al database;
• Non si vuole mettere i clienti esterni in vpn;
![Page 17: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/17.jpg)
Requirements
• Si vuole che il software sia deployabile in due configurazioni;
• La prima interna in cui l’accesso viene fatto direttamente al database in rete locale;
• La seconda per i clienti esterni che accederanno tramite un servizio WCF;
![Page 18: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/18.jpg)
Solution
• Il ViewModel Dipenderà da vari servizi come IMusicStore service;
• Nella configurazione interna si risolve con castle una classe MusicStore che accede al db internamente;
• Nella versione esterna realizziamo una facility di Castle.Windsor che crea «on the fly» il proxy ai servizi wcf;
• Basta cambiare il config ed è fatta
![Page 19: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/19.jpg)
Schema di funzionamento
MusicStoreService
MusicStoreService ProxyWCF
![Page 20: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/20.jpg)
DEMOCreazione dinamica di Proxy WCF
![Page 21: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/21.jpg)
INTRODUCING I.O.C. IN WEB FORMS
Nightmare before Christmas :-P
![Page 22: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/22.jpg)
Scenario
• Applicazione web legacy, molto legacy, basata su Web Form;
• CMS basato su «componenti» (aka ascx);
• Svariate decine di installazioni con supporto per l’auto-update;
![Page 23: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/23.jpg)
Requirements
• Necessità di aggiornare la metodologia di sviluppo dei nuovi componenti introducendo, tra le tante, IoC;
• Necessità di mantenere la retro-compatibilità con tutte le installazioni esistenti;
![Page 24: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/24.jpg)
Solution
• Al fine di avere IoC dobbiamo inizializzare il container allo startup, quindi niente HttpModule ma modifica al global.asax;
• «ISupportInitialize» al fine di ridurre a zero le breaking change:– Nessuna nuova dipendenza;– Eccezioni soffocate e «semplicemente»
loggate;• Le nuove «Web Form» diventano dei meri
«passacarte» tra la view e i servizi;
![Page 25: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/25.jpg)
DEMOIntroducing I.o.C. in Web Forms
![Page 26: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/26.jpg)
AUDIT DEI DATIFidarsi degli utenti è bene, ma non fidarsi è sicuramente meglio
![Page 27: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/27.jpg)
Requirements• Alcune Entità/Tabelle, ma non tutte,
potrebbero in futuro dovere essere auditabili;
• Per «auditabile» si intende la possibilità di determinare chi e quando ha creato la riga/istanza e chi e quando ha apportato l’ultima modifica;
![Page 28: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/28.jpg)
Soluzione • Adottare un ORM permette di intercettare
ogni «save» e «update» delle entità;• In questo modo l’operazione di audit può
essere centralizzata e resa trasparente allo sviluppatore;
• Per rendere una entità auditabile è sufficiente aggiungere le proprietà e la corrispettiva interfaccia;
![Page 29: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/29.jpg)
DEMOAudit dei dati
![Page 30: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/30.jpg)
QUERY SPECIFICATION VS REPOSITORY OVER WCF
Un requisito un po’ diverso dal solito…
![Page 31: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/31.jpg)
Scenario
• Servizio WCF per la gestione di un «albero»:– Rami;– Foglie;– Attributi (sia su rami che su foglie);
![Page 32: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/32.jpg)
Requirements
• I dati gestiti dall’albero devono essere localizzabili;
• Esporre un motore di «query» over WCF;
• Introdurre nel team un dev junior:– completamente a digiuno di WCF…;– …e anche di tutto il resto :-P
![Page 33: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/33.jpg)
«Tentative»
• il «repository» è stato fallimentare:– Per il dev junior troppo difficile da
maneggiare;– Inutilmente complesso cercare di gestire il
concetto di «query componibile»;– Proliferare di metodi intellisense pollution;– Necessità di necessità di condividere tra
repository diversi la stessa UoW;
![Page 34: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/34.jpg)
Solution
• «Query Specification»– Classe che astrae il concetto di query;– Classe che si occupa di eseguire la query a
fronte di un provider;– UoW condivisa in base al caso d’uso;
• «Query Criteria» over WCF:– Cosa ci vieta di rappresentare con dei DTO il
concetto di «criterio» e renderlo componibile?
![Page 35: Dal requisito all'implementazione @ CD2010](https://reader033.vdocuments.mx/reader033/viewer/2022051610/5484c3bdb4af9f8c0d8b4d1c/html5/thumbnails/35.jpg)
DEMOQuery Specification vs Repository over WCF