UGIALT.NET Conference - 14 Giugno 2008










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




Manifesto
Storia
Cosa significa ALT.NET
Perchè ALT.NET
 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)





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


ALT != Alternativo
ALT == Avere Alternative


UserGroup tradizionali sono “about
technology”
Più importante:
 Principi base dell’OOP
 Processi e metodologie di sviluppo
 Tool Alternativi






Agilità (Emanuele DelBono)
TDD (Roberto Valenti)
Mocking – Rhino (Claudio Maccari)
IoC/DI (Simone Busoli)
MVC/MVP (Simone Chiaretta)
ORM (Matteo Baglini)
Emanuele DelBono
[email protected]
http://blog.codiceplastico.com
 La
 Il
femmina
danaro
 La
mortazza
Iterazioni
Collaborazione
Adattabilita’





Fornire valore al cliente in breve tempo
Gestire il cambiamento
Ridurre il rischio
Migliorare la qualità
Per divertirsi mentre si lavora!

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



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 …)

Migliorare il software tramite l’ applicazione
di una serie di modifiche interne che non
cambiano il comportamento esterno.


Non è testare il codice.
Aiutare sviluppatori e clienti durante il
processo di sviluppo definendo requisiti non
ambigui.
 TDD = Design
(design emergente)

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
Claudio Maccari
Mail: [email protected]
Blog (ITA): http://blogs.ugidotnet.org/makka
Blog (ENG): http://testdrivendevelopment.wordpress.com/

Framework mock object per .net
 http://www.ayende.com/projects/rhino-
mocks.aspx


Si parla di test… unit testing
Ora disponibile versione 3.4
Fake the hard stuff

Risorse esterne
 Networks
 Databases
 Altri sistemi


Risorse interne
Qualsiasi cosa con setup complesso
 Legacy code
Objects talking to objects


“State based testing” va bene
“Interaction based testing” e più interessante
1.
2.
3.
4.
5.
Creazione di un mock
Definizione delle comporamento atteso
Esecuzione del codice sotto da testare
Verifica delle aspettative
Asserts addizionali
Lets see some code!

La soluzione sta nel mezzo ?

Download
 http://www.ayende.com/projects/rhino-mocks.aspx

Wiki
 http://www.ayende.com/Wiki/

Quick Reference (ottimo documento)
 http://www.ayende.com/Wiki/GetFile.aspx?File=R
hino+Mocks+3.3+Quick+Reference.pdf

Dopo 
Simone Busoli
14/06/2008 - Milano


Comunemente DI - IoC
Principi comuni di disegno software
 Alta coesione
 Basso accoppiamento
…

Basso accoppiamento
 Riduzione delle dipendenze tra componenti
software
 Chi conosce chi?

Risoluzione dipendenze tra componenti

Voglio poter registrare le iscrizioni ad un
evento
 Persistere i dettagli dell’iscritto
 Comunicare se l’iscrizione è andata a buon fine
tramite mail
EmailService
SubscriptionService
PersonRepository

SubscriptionService conosce direttamente i dettagli di
EmailService e PersonRepository BAD

Il servizio conosce solo l’interfaccia dei componenti
che utilizza GOOD

Iniettare dipendenze dall’esterno rende più
onerosa l’istanziazione di componenti
 Necessario conoscere tutte le dipendenze

Hollywood Principle
 Don’t call us, we will call you!
Vorrei un’istanza di
SubscriptionService



Entità esterna all’applicazione
Configurabile
Conosce le dipendenze tra i componenti ed è
in grado di soddisfarle a runtime
IoC Container
Vorrei un’istanza di SubscriptionService
Istanza completa di tutte le dipendenze


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

Configurazione Xml

Codice client

Molto meglio, eh?
Altri containers

 StructureMap
 Spring.Net
 Autofac
…



Inversion of Control and Dependency
Injection: Working with Windsor Container
http://msdn.microsoft.com/enus/library/aa973811.aspx
Castle Project
http://www.castleproject.org/container/
StructureMap
http://structuremap.sourceforge.net
14/06/2008 – Sim0ne Chiaretta
email: [email protected]
blog ITA: http://blogs.ugidotnet.org/piyo/
blog ENG: http://codeclimber.net.nz/


Loose coupling
Necessario rimuovere l’ambiente esterno
 Uomo
 WebServer


MVC – Model View Controller
MVP – Model View Presenter
Model
Controller
View
View
Presenter
IView
Model

MVC
 MonoRail
 ASP.NET MVC Framework
 Prism

MVP
 Mostly custom built
 WebClientSoftwareFactory
 CompositeUIApplicationBlock
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/mvcresources/
- 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
14/06/2008 – Matteo Baglini
Mail: [email protected]
Blog: http://blogs.ugidotnet.org/bmatte

Business Logic Layer modellato utilizzando il
pattern Domain Model.

Le tabelle del database secondo il modello
relazionale RDBMS .

L’ Object Relational Mapping è uno
strumento che permette di mappare i dati fra
il modello RDBMS ed il modello OOP.

File XML

Decorando Classi e Proprietà con Attributi



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.



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.

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

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/

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/Da
ta/default.aspx

Entity Framework
 MSDN - http://msdn.microsoft.com/en-
us/library/aa697427(VS.80).aspx
 CodePlex Sampleshttp://www.codeplex.com/adonetsamples/
Scarica

Introduzione a UGIALT