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

Más contenido relacionado

Similar 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
 

Similar 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
 

Más 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
 

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