SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Lavorare con applicazioni Brownfieldil caso di 39x27.com,[object Object],5° UGIALT.NET Conference – Milano,[object Object],23 Gennaio 2010,[object Object],Simone ChiarettaSolution Developer, Avanade,[object Object],@simonech,[object Object],http://codeclimber.net.nz,[object Object],Davide VostiTeam Lead, YEK SA,[object Object],@vosti,[object Object],http://vosti.posterous.com/,[object Object]
Chi siamo,[object Object],Simone Chiaretta,[object Object],Lavora per Avanade Italy,[object Object],Microsoft MVP ASP.NET e ASP Insider,[object Object],Blogger – http://codeclimber.net.nz,[object Object],Co-fondatore di UGIALT.NET,[object Object],Climber,[object Object],Davide Vosti,[object Object],Team Lead di YEK SA,[object Object],Owner di http://39x27.com,[object Object],Ciclista, podista, parapendista,[object Object]
Cos’è 39x27.com,[object Object],Archivio di salite in bicicletta, con altimetrie e tempi,[object Object],Inventato da Davide,[object Object],Rilasciata sulle preview di ASP.NET MVC 1.0 nel 2008,[object Object],Speriamo di rilasciarla come opensource e come esempio di applicazione completa in ASP.NET MVC,[object Object],Team:,[object Object],Davide Vosti,[object Object],Simone Chiaretta,[object Object],Daniela Panfili - UX,[object Object]
Agenda,[object Object],Cos’è un applicazione “BrownField”,[object Object],Da dove parto?,[object Object],I problemi dell’ambiente di sviluppo,[object Object],I problemi del codice,[object Object],I problemi della UI,[object Object],Problemi di attuazione,[object Object],E dopo?,[object Object]
Cos’è un’applicazione BrownField,[object Object]
Definizione di BrownField,[object Object],Brown Field è l’opposto di Green Field,[object Object],aka progetti Legacy,[object Object],o, come dicono alcuni:,[object Object],“Applicazione non pensata per essere testabile”,[object Object],Tutti i progetti non nuovi sono brownfield,[object Object],Tutte le applicazioni tendono naturalmente a diventare brownfield,[object Object]
Da dove partire?,[object Object],I passi iniziali,[object Object]
E’ tutto da rifare,[object Object],Codice sorgente versionato in folder *_data,[object Object],Lista dei bugs su file excel,[object Object],Classi di 10k righe,[object Object],Metodi con indice di mantenibilità <10,[object Object],Elevatissimo accoppiamento tra i livelli (sempre se ci sono),[object Object],1000 step manuali per compilare per la prima volta,[object Object],200 step manuali per produrre una release “deployabile”,[object Object],Tutto in un unico progetto,[object Object]
Piano d’attacco,[object Object],Source Control, Issue Tracking, Build Automation,[object Object],Codice base (DAL, Domain Model, ecc...),[object Object],Codice di UI layer,[object Object]
L’ambiente di sviluppo,[object Object],I Problemi dell’ambiente di sviluppo,[object Object]
Version Control System,[object Object],Se siamo veramente sfortunati,[object Object],step 1: configurare un SVN, TFS, Git, ...,[object Object],Se siamo più fortunati:,[object Object],Sistemare il repository,[object Object],Rimuovere folder Obj, Bin, .user, ecc...,[object Object],svn-ignore FTW!!,[object Object]
Get and compile experience,[object Object],Obiettivo 2:,[object Object],poter fare get latest e compilare su una macchina “vergine” senza acrobazie,[object Object]
Riorganizzare alberatura,[object Object],Mettere tutte le dipendenze sotto VCS,[object Object],No GAC-Hell,[object Object],Sistemare le referenze di progetto,[object Object],Inserire anche eventuali tool necessari:,[object Object],TestRunner,[object Object],Profilers,[object Object],Build Tools,[object Object]
Automatizzare la build,[object Object],Con o senza CI, la build deve andare da sola,[object Object],MSBuild,[object Object],NAnt,[object Object],Continuos Integration se team è sopra le 2-3 persone,[object Object],TFS,[object Object],TeamCity,[object Object],CC.NET,[object Object],Hudson,[object Object]
Chi ha scritto questo codice?,[object Object],I problemi del codice,[object Object]
Analizzare il codice,[object Object],Capire tramite metriche lo stato del codice,[object Object],Usare le metriche per identificare le zone critiche,[object Object],Farci aiutare dai tool come R# per ripulire il codice,[object Object]
Riorganizzare la solution,[object Object],Avere vari progetti per i vari layer,[object Object],Repositories,[object Object],Services,[object Object],DomainModel,[object Object],Codice “infrastrutturale”,[object Object],UI,[object Object],Test,[object Object]
Break dependencies, be SOLID,[object Object],Rompi le dipendenze!!,[object Object],Come farlo:,[object Object],Scegli un componente,[object Object],Imposta test funzionale (automatico o manuale),[object Object],Rimuovi le sue dipendenze,[object Object],Testalo senza le dipendenze,[object Object],Ripeti con un’altro componente,[object Object],Non gestire le dipendenza a mano, usa un IoC Container,[object Object]
Demo,[object Object],39x27.com: prima e a metà della cura,[object Object]
Un po’ di UI pattern,[object Object],I problemi della UI,[object Object]
Miglioriamo la UI,[object Object],Anche la UI ha la stessa dignità del data access,[object Object],Pattern MVP/MVC/MVVM per isolare meglio UI da strato sottostante,[object Object],Se web application, dobbiamo considerare anche HTML, CSS e Javascript,[object Object]
Tutto bello, ma...,[object Object],I problemi di attuazione,[object Object]
I problemi più comuni del refactoring,[object Object],Fare di tutto un po’,[object Object],Refactoring o nuove features?,[object Object]
E ora?,[object Object],Cosa fare una volta che siamo tornati VERDI,[object Object]
Come rimanere verdi?,[object Object],Evitare le iterazioni di refactoring,[object Object],Cercare di mantenere alta la qualità,[object Object],Manutenere gli ambienti di CI, Build e testing,[object Object]
Get the book,[object Object],Brownfield Application Development in .NET,[object Object],Kyle Baley and Donald Belcham,[object Object],Aprile 2010,[object Object],http://www.manning.com/baley/,[object Object],4 copie in omaggio questa sera,[object Object]
Contatti – Simone Chiaretta,[object Object],MSN: simone_ch@hotmail.com,[object Object],Blog:,[object Object],English: http://codeclimber.net.nz/,[object Object],Italiano: http://blogs.ugidotnet.org/piyo/,[object Object],Twitter: @simonech,[object Object],26,[object Object]
Contatti – Davide Vosti,[object Object],Skype: davide.vosti,[object Object],Blog: http://vosti.posterous.com/,[object Object],Twitter: @vosti,[object Object],27,[object Object]
Q&A,[object Object],28,[object Object]

Mais conteúdo relacionado

Semelhante a Lavorare con applicazioni Brownfield: il caso di 39x27.com

Webcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineWebcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineDavide Benvegnù
 
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webAndrea Dottor
 
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...Marco Parenzan
 
Continuous Integration con Visual Studio Online
Continuous Integration con Visual Studio OnlineContinuous Integration con Visual Studio Online
Continuous Integration con Visual Studio OnlineDavide Benvegnù
 
Prototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsPrototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsCommit University
 
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte
 
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web Appdotnetcode
 
Integrazione con Visual Studio Online
Integrazione con Visual Studio OnlineIntegrazione con Visual Studio Online
Integrazione con Visual Studio OnlineDavide Benvegnù
 
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web Appdotnetcode
 
Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?Andrea Carratta
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angulardotnetcode
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsGiorgio Di Nardo
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaAndrea Dottor
 
Code Generation con i templates T4 in visual studio
Code Generation con i templates T4 in visual studioCode Generation con i templates T4 in visual studio
Code Generation con i templates T4 in visual studioMarco Parenzan
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS BuildGian Maria Ricci
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functionsdotnetcode
 
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Mattia Milleri
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailStefano Ottaviani
 
7. Applicazioni Web e CMS
7. Applicazioni Web e CMS7. Applicazioni Web e CMS
7. Applicazioni Web e CMSRoberto Polillo
 

Semelhante a Lavorare con applicazioni Brownfield: il caso di 39x27.com (20)

Webcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineWebcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio Online
 
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
 
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
 
Continuous Integration con Visual Studio Online
Continuous Integration con Visual Studio OnlineContinuous Integration con Visual Studio Online
Continuous Integration con Visual Studio Online
 
Prototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsPrototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step Functions
 
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
 
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web App
 
Integrazione con Visual Studio Online
Integrazione con Visual Studio OnlineIntegrazione con Visual Studio Online
Integrazione con Visual Studio Online
 
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
 
Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
 
Microsoft Fast - Overview
Microsoft Fast - OverviewMicrosoft Fast - Overview
Microsoft Fast - Overview
 
Code Generation con i templates T4 in visual studio
Code Generation con i templates T4 in visual studioCode Generation con i templates T4 in visual studio
Code Generation con i templates T4 in visual studio
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS Build
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functions
 
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
 
7. Applicazioni Web e CMS
7. Applicazioni Web e CMS7. Applicazioni Web e CMS
7. Applicazioni Web e CMS
 

Mais de Simone Chiaretta

Fast and furious(ly) multilingual: Publishing of EU politics in 24 languages ...
Fast and furious(ly) multilingual: Publishing of EU politics in 24 languages ...Fast and furious(ly) multilingual: Publishing of EU politics in 24 languages ...
Fast and furious(ly) multilingual: Publishing of EU politics in 24 languages ...Simone Chiaretta
 
OpenROV: Node.js takes a dive into the ocean
OpenROV: Node.js takes a dive into the oceanOpenROV: Node.js takes a dive into the ocean
OpenROV: Node.js takes a dive into the oceanSimone Chiaretta
 
What's new in asp.net mvc 4
What's new in asp.net mvc 4What's new in asp.net mvc 4
What's new in asp.net mvc 4Simone Chiaretta
 
FeedTso, History of a WP7 FeedReader
FeedTso, History of a WP7 FeedReaderFeedTso, History of a WP7 FeedReader
FeedTso, History of a WP7 FeedReaderSimone Chiaretta
 
Ruby on Rails vs ASP.NET MVC
Ruby on Rails vs ASP.NET MVCRuby on Rails vs ASP.NET MVC
Ruby on Rails vs ASP.NET MVCSimone Chiaretta
 
Design for testability as a way to good coding (SOLID and IoC)
Design for testability as a way to good coding (SOLID and IoC)Design for testability as a way to good coding (SOLID and IoC)
Design for testability as a way to good coding (SOLID and IoC)Simone Chiaretta
 

Mais de Simone Chiaretta (10)

Fast and furious(ly) multilingual: Publishing of EU politics in 24 languages ...
Fast and furious(ly) multilingual: Publishing of EU politics in 24 languages ...Fast and furious(ly) multilingual: Publishing of EU politics in 24 languages ...
Fast and furious(ly) multilingual: Publishing of EU politics in 24 languages ...
 
OpenROV: Node.js takes a dive into the ocean
OpenROV: Node.js takes a dive into the oceanOpenROV: Node.js takes a dive into the ocean
OpenROV: Node.js takes a dive into the ocean
 
La UX delle cose
La UX delle coseLa UX delle cose
La UX delle cose
 
UGIALT.net Keynote
UGIALT.net KeynoteUGIALT.net Keynote
UGIALT.net Keynote
 
What's new in asp.net mvc 4
What's new in asp.net mvc 4What's new in asp.net mvc 4
What's new in asp.net mvc 4
 
FeedTso, History of a WP7 FeedReader
FeedTso, History of a WP7 FeedReaderFeedTso, History of a WP7 FeedReader
FeedTso, History of a WP7 FeedReader
 
Ruby on Rails vs ASP.NET MVC
Ruby on Rails vs ASP.NET MVCRuby on Rails vs ASP.NET MVC
Ruby on Rails vs ASP.NET MVC
 
Design for testability as a way to good coding (SOLID and IoC)
Design for testability as a way to good coding (SOLID and IoC)Design for testability as a way to good coding (SOLID and IoC)
Design for testability as a way to good coding (SOLID and IoC)
 
The ViewModel pattern
The ViewModel patternThe ViewModel pattern
The ViewModel pattern
 
ASP.NET MVC Extensibility
ASP.NET MVC ExtensibilityASP.NET MVC Extensibility
ASP.NET MVC Extensibility
 

Lavorare con applicazioni Brownfield: il caso di 39x27.com

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.