UGIALT.NET Conference - 14 Giugno 2008. 10:00 – Benvenuto 10:15 – Introduzione a UGIALT.NET...
-
Upload
enrico-nobile -
Category
Documents
-
view
227 -
download
0
Transcript of UGIALT.NET Conference - 14 Giugno 2008. 10:00 – Benvenuto 10:15 – Introduzione a UGIALT.NET...
UGIALT.NET Conference II
UGIALT.NET Conference - 14 Giugno 2008
Agenda della conference
10:00 – Benvenuto 10:15 – Introduzione a UGIALT.NET 10:30 – Lightning talks 11:00 – Pausa 11:15 – Prioritizzazione user stories 11:30 – Prima User Story introduttiva 12:00 – Users Stories 13:30 – Pranzo 14:30 – User Stories cont. 17:30 – Chiusura Lavori e futuro
Sponsor
Introduzione a UGIALT
Agenda
Manifesto Storia Cosa significa ALT.NET Perchè ALT.NET
Manifesto
Sei un dev che usa quello che funziona ma sei sempre alla ricerca di qualcosa di meglio
Tieni d’occhio il resto del mondo per adottare il meglio da ogni community: Open Source, Agile, Java, Ruby, ecc…
Non sei contento del tuo stato attuale. Le cose possono sempre essere migliorarate, codice più elegante e semplice, più manutenibile e di maggiore qualità
Sai che I tools sono importanti, ma non ti portano molto lontano. Sono i principi e la conoscenza che contano. I tool migliori sono quelli che incorporano la conoscenza e incoraggiano I principi (ad. Es. Resharper)
Un po’ di storia
Aprile 2007 – Il termine ALT.NET appare per la prima volta in un post di David Laribee
Ottobre 2007 – Prima ALT.NET Conference ad Austin (TX)
Novembre 2007 – Nasce UGIALT.NET Febbraio 2008 – 1° Conf UGIALT.NET Aprile 2008 – ALT.NET conf a Seattle
Cosa significa ALT
ALT != Alternativo ALT == Avere
Alternative
Perchè ALT.NET
UserGroup tradizionali sono “about technology”
Più importante: Principi base dell’OOP Processi e metodologie di sviluppo Tool Alternativi
Ligthning Talks
Agenda
Agilità (Emanuele DelBono) TDD (Roberto Valenti) Mocking – Rhino (Claudio Maccari) IoC/DI (Simone Busoli) MVC/MVP (Simone Chiaretta) ORM (Matteo Baglini)
Agilità
Emanuele DelBono [email protected]://blog.codiceplastico.com
Le metodologie tradizionali
Agility!
I tre capisaldi
La femmina
Il danaro
La mortazza
I tre capisaldi (quelli veri)
Iterazioni
Collaborazione
Adattabilita’
Le persone non strumenti
Software, non documentazione
Il cliente collaborativo
Adattarsi al cambiamento
Perché?
Fornire valore al cliente in breve tempo
Gestire il cambiamento Ridurre il rischio Migliorare la qualità Per divertirsi mentre si lavora!
Cos’è XP?
XP è una metodologia basata su un insieme di pratiche: Whole Team Planning Game Customer Tests Small Releases Simple Design Pair Programming Test Driven Development Design Improvement Continuous Integration Collective Code Ownership Coding Standard Metaphor Sustainable Pace
Cos’è Test Driven Development
Pratica di XP Sviluppo funzionalità guidato dai Test Attività di progettazione :
Red : definire il comportamento atteso con asserzioni
Green : rendere eseguibili con successo i test, le asserzioni sono verificate
Refactor : effettuare refactoring mantenendo verificate asserzioni (eliminare duplicati, design pattern …)
TDD Mantra
Refactoring
Migliorare il software tramite l’ applicazione di una serie di modifiche interne che non cambiano il comportamento esterno.
Scopo principale del TDD
Non è testare il codice. Aiutare sviluppatori e clienti durante
il processo di sviluppo definendo requisiti non ambigui.
TDD = Design(design emergente)
Velocità sviluppo tradizionale
Tradizionale vs Agile
Benefici
Codice semplice e funzionante (Simple Design Principle) “Simplicity is more complicated than you think. But it’s well worth it” – Ron Jeffries
Codice Testato (Test Behaviour Not Code)
Facilmente manetunibile (Embrace Change)
YAGNI (You Arent Gonna Need It) = No over design
Rhino.Mocks
Claudio MaccariMail: [email protected] Blog (ITA): http://blogs.ugidotnet.org/makkaBlog (ENG): http://testdrivendevelopment.wordpress.com/
Cos’è Rhino.Mocks?
Framework mock object per .net http://www.ayende.com/projects/rhino-m
ocks.aspx Si parla di test… unit testing Ora disponibile versione 3.4
Rende più semplice lo unit testing
Risorse esterne Networks Databases Altri sistemi
Risorse interne Qualsiasi cosa con setup complesso
Legacy code
Fake the hard stuff
Si tratta di interazione
“State based testing” va bene “Interaction based testing” e più
interessante
Objects talking to objects
Struttura di un test con Rhino.Mock
1. Creazione di un mock2. Definizione delle comporamento
atteso3. Esecuzione del codice sotto da
testare4. Verifica delle aspettative5. Asserts addizionali
Basta chiacchiereLets see some code!
Codice da testare
Test usando il mock
Per andare a fondo
Registra e ripeti
La soluzione sta nel mezzo ?
Tipi di mock
Impostare le aspettative (1/2)
Impostare le aspettative (2/2)
Rhino.Mocks … Rocks!
Download http://www.ayende.com/projects/rhino-mocks.a
spx Wiki
http://www.ayende.com/Wiki/ Quick Reference (ottimo documento)
http://www.ayende.com/Wiki/GetFile.aspx?File=Rhino+Mocks+3.3+Quick+Reference.pdf
Q & A
Dopo
Dependency Injection Inversion of Control
Simone Busoli 14/06/2008 - Milano
Di cosa si tratta
Comunemente DI - IoCPrincipi comuni di disegno software
Alta coesione Basso accoppiamento …
Basso accoppiamento Riduzione delle dipendenze tra componenti
software Chi conosce chi?
Risoluzione dipendenze tra componenti
Scenario
Voglio poter registrare le iscrizioni ad un evento Persistere i dettagli dell’iscritto Comunicare se l’iscrizione è andata a
buon fine tramite mailSubscriptionService
EmailService
PersonRepository
Dependency InjectionElevato accoppiamento
SubscriptionService conosce direttamente i dettagli di EmailService e PersonRepository BAD
Dependency InjectionCambiamento di paradigma
Il servizio conosce solo l’interfaccia dei componenti che utilizza GOOD
Dependency Injection
Iniettare dipendenze dall’esterno rende più onerosa l’istanziazione di componenti Necessario conoscere tutte le
dipendenze
Inversion of Control
Hollywood Principle Don’t call us, we will call you!
Vorrei un’istanza di
SubscriptionService
Inversion of Control Container
Entità esterna all’applicazione Configurabile Conosce le dipendenze tra i
componenti ed è in grado di soddisfarle a runtime
IoC ContainerVorrei un’istanza di
SubscriptionService
Istanza completa di tutte le dipendenze
Windsor Container
Inversion of Control container open source
Stabile – production ready
Si configura il container (xml, boo,
C#)
Si richiede l’istanza di un componente
Il container si occupa di
soddisfare le dipendenze e
creare l’istanza
Windsor ContainerEsempio
Configurazione Xml
Windsor ContainerEsempio
Codice client
Molto meglio, eh? Altri containers
StructureMap Spring.Net Autofac …
Risorse
Inversion of Control and Dependency Injection: Working with Windsor Container http://msdn.microsoft.com/en-us/library/aa973811.aspx
Castle Project http://www.castleproject.org/container/
StructureMap http://structuremap.sourceforge.net
UI Patterns: MVC – MVP
14/06/2008 – Sim0ne Chiarettaemail: [email protected] ITA: http://blogs.ugidotnet.org/piyo/blog ENG: http://codeclimber.net.nz/
It’s all about separation
Loose coupling Necessario rimuovere l’ambiente
esterno Uomo WebServer
UI Pattern
MVC – Model View Controller MVP – Model View Presenter
Model View Controller
Model
View
Controller
Model View Presenter
ModelPresenterView
IView
Dove si trovano in natura
MVC MonoRail ASP.NET MVC Framework Prism
MVP Mostly custom built WebClientSoftwareFactory CompositeUIApplicationBlock
Come saperne di più su MVC http://asp.net/mvc/ - Sito ufficiale, con download P2 http://www.codeplex.com/aspnet - Codice sorgente http://del.icio.us/tag/aspnetmvc - tutti gli articoli su
ASP.NET MVC http://polymorphicpodcast.com/shows/mvcresource
s/ - lista “commentata” di risorse
Blog di MS ScottGu: http://weblogs.asp.net/scottgu/default.aspx ScottHa: http://www.hanselman.com/blog/ PhilHa: http://haacked.com/
Leggendo il mio blog DotNetMarche – 27 Giugno – Testing automatizzato
e Asp.NET MVC Framework
ORM - Object Relational Mapping
14/06/2008 – Matteo BagliniMail: [email protected]: http://blogs.ugidotnet.org/bmatte
Quando e Perchè usare un ORM
Scenario
Business Logic Layer modellato utilizzando il pattern Domain Model.
Le tabelle del database secondo il modello relazionale RDBMS .
Problema
Paradigm Mismatch
?ORM
Definizione di ORM
L’ Object Relational Mapping è uno strumento che permette di mappare i dati fra il modello RDBMS ed il modello OOP.
Tecniche di Data Mapping
File XML
Decorando Classi e Proprietà con Attributi
Vantaggi e Svantaggi
Vantaggi
Permette di disegnare il modello seguendo la teoria OOP osservando solo la business logic.
Approccio non più bottom-up ma top-down (dal dominio alla persistenza).
Generazione automatica ed ottimizzata di statement sql creati ad hoc, i quali permettendo di gestire in maniera molto più granulare le operazioni CRUD.
Svantaggi
Alta curva di apprendimento iniziale. Leggeri compromessi nella
progettazione del Domain Model, es. Implementare interfacce.
Viene visto come “lo strumento” che permette allo sviluppatore di dimenticarsi del database.
ORM per .NET
I più famosi
NHibernate Open Source / Porting da Hibernate (Java) /
Multi Database Vendor / Persistence Ignorance / Mapping Complessi
Linq To Sql Supporto di MS/ Integrato con VS / Sintassi
Linq / Molto Semplice Entity Framework (Beta 3)
Supporto di MS/ Integrato con VS / Multi Database Vendor / Sintassi Linq / Mapping Complessi
Link
Object Relational Mapping Wikipedia -
http://en.wikipedia.org/wiki/Object-relational_mapping
C2.com - http://c2.com/cgi/wiki?ObjectRelationalMapping
NHibernate/Hibernate Sito - http://www.hibernate.org/ Libro - http://www.manning.com/kuate/
Link
Linq To Sql MSDN -
http://msdn.microsoft.com/en-us/library/bb386976.aspx
Serie di di Post sul Blog di ScottGu - http://weblogs.asp.net/scottgu/archive/tags/LINQ/Data/default.aspx
Entity Framework MSDN -
http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx
CodePlex Samples- http://www.codeplex.com/adonetsamples/