UGIALT.NET Conference - 14 Giugno 2008. 10:00 – Benvenuto 10:15 – Introduzione a UGIALT.NET...

Post on 02-May-2015

227 views 0 download

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 emanuele@codiceplastico.comhttp://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: cmaccari@absistemi.it 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: simone@piyosailing.comblog 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: matteo.baglini@gmail.comBlog: 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/