Sviluppo Web Agile con Castle MonoRail Diego Guidi [email protected] DotNetMarche.Start()...

16
Sviluppo Web Agile con Sviluppo Web Agile con Castle MonoRail Castle MonoRail Diego Guidi Diego Guidi [email protected] [email protected] DotNetMarche.Start() DotNetMarche.Start() Giovedì 12 ottobre 2006 Giovedì 12 ottobre 2006

Transcript of Sviluppo Web Agile con Castle MonoRail Diego Guidi [email protected] DotNetMarche.Start()...

Page 1: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Sviluppo Web Agile con Sviluppo Web Agile con

Castle MonoRailCastle MonoRail

Diego GuidiDiego [email protected]@gmail.com

DotNetMarche.Start()DotNetMarche.Start()Giovedì 12 ottobre 2006Giovedì 12 ottobre 2006

Page 2: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Sono io?Sono io?

Diego GuidiDiego Guidi

http://dotnetmarche.org/members/D_Guhttp://dotnetmarche.org/members/D_Guidi.aspxidi.aspx http://nts.sourceforge.nethttp://nts.sourceforge.net http://blogs.ugidotnet.org/GisSharpBloghttp://blogs.ugidotnet.org/GisSharpBlog http://http://lacorrente.blogspot.comlacorrente.blogspot.com [email protected]@gmail.com

Page 3: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Porting di Ruby On RailsPorting di Ruby On Rails

Agile Web Application Framework MVC-BasedAgile Web Application Framework MVC-Based

Basato su architettura .NET e ASP.NETBasato su architettura .NET e ASP.NET

Parte del “Castle Project”Parte del “Castle Project”

Licenza: “Apache License, Version 2.0”Licenza: “Apache License, Version 2.0”

Non legato a MONO!Non legato a MONO!

Oggi parliamo di…Oggi parliamo di…MonoRailMonoRail

Page 4: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Ruby On RailsRuby On Rails Buzzword del 2006 - dopo Web 2.0 ovviamente!Buzzword del 2006 - dopo Web 2.0 ovviamente!

Ha imposto all’attenzione di tutti Ruby Ha imposto all’attenzione di tutti Ruby come linguaggio di programmazionecome linguaggio di programmazione

Ha imposto all’attenzione di tutti un modello Ha imposto all’attenzione di tutti un modello di programmazione “agile”di programmazione “agile”

MonoRail recepisce ed estende RoRMonoRail recepisce ed estende RoR

Fonte: http://radar.oreilly.com/archives/2006/08/programming_language_trends_1.html

Page 5: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Molti nemici, molto onore…Molti nemici, molto onore…

DJangoDJango: : Python basedPython based GRailsGRails: : Java basedJava based AkelosAkelos: : PHP basedPHP based Flex On RailsFlex On Rails::Flash/Flex basedFlash/Flex based

SubSonicSubSonic: The Zero Code DAL: The Zero Code DAL .NET based.NET based Estremamente automatizzatoEstremamente automatizzato Poco flessibile (al momento…)Poco flessibile (al momento…) http://www.codeplex.com/Wiki/View.aspx?http://www.codeplex.com/Wiki/View.aspx?

ProjectName=actionpackProjectName=actionpack

Page 6: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Agile Web Application Agile Web Application Framework MVC-BasedFramework MVC-Based

MVC-BasedMVC-Based::

ModelModel: mantiene lo stato dell’applicazione e si occupa : mantiene lo stato dell’applicazione e si occupa della persistenza sul database.della persistenza sul database.

ViewView: responsabile della presentazione dei dati del : responsabile della presentazione dei dati del modello e dell’interfaccia utente.modello e dell’interfaccia utente.

ControllerController: riceve gli eventi dall’utente, interagisce con : riceve gli eventi dall’utente, interagisce con il modello e richiama la vista corretta.il modello e richiama la vista corretta.

Separazione dei compiti

Ogni cosa al suo posto!

Page 7: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Agile Web Application Agile Web Application Framework MVC-BasedFramework MVC-Based

MVC-BasedMVC-Based: http://localhost:81/home/index.rails: http://localhost:81/home/index.rails

- - homehome: controller: controller

- - indexindex: action (metodo) : action (metodo) del controller homedel controller home

- - indexindex: view associata : view associata al controller homeal controller home

Page 8: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Agile Web Application Agile Web Application Framework MVC-BasedFramework MVC-Based

AGILEAGILE:: promuove un modello di sviluppo che, promuove un modello di sviluppo che, automatizzando automatizzando i task ripetitivi, permette allo i task ripetitivi, permette allo sviluppatore di sviluppatore di concentrarsi concentrarsi sull’applicazione e non sull’infrastruttura.sull’applicazione e non sull’infrastruttura.

Convention Over ConfigurationConvention Over Configuration: limitare al minimo la : limitare al minimo la necessità di file di configurazione, favorendo al contrario necessità di file di configurazione, favorendo al contrario le convenzioni.le convenzioni.

DRY (Don’t Repeate Yourself)DRY (Don’t Repeate Yourself): evitare le ripetizioni di : evitare le ripetizioni di codice favorendo la condivisione.codice favorendo la condivisione.

Test SupportTest Support: supporto per i test : supporto per i test funzionalifunzionali (controller).(controller).

Page 9: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Costruzione di un progetto di base Costruzione di un progetto di base con con Castle MonoRailCastle MonoRail

Applicazione DemoApplicazione Demo

Page 10: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Rappresenta la parte Rappresenta la parte ModelModel di MonoRail di MonoRail Implementazione del pattern ActiveRecord:Implementazione del pattern ActiveRecord:

““An object that wraps a row in a database table, encapsulates the An object that wraps a row in a database table, encapsulates the database access, and adds domain logic on that data.” (Fowler, database access, and adds domain logic on that data.” (Fowler, Patterns of EEA)Patterns of EEA)

Basato su NHibernateBasato su NHibernate Persistenza gestita tramite meta-programmazione Persistenza gestita tramite meta-programmazione

(attributi)(attributi) Non è necessario scriversi i file di mapping!Non è necessario scriversi i file di mapping! Validazione semi-automatica, gestita tramite attributi.Validazione semi-automatica, gestita tramite attributi. Operazioni CRUD ereditate dalle classi base.Operazioni CRUD ereditate dalle classi base.

Disponibile anche separatamente da MonoRailDisponibile anche separatamente da MonoRail

MonoRail components:MonoRail components:

ActiveRecordActiveRecord

Page 11: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Rappresenta la parte Rappresenta la parte ViewView e e ControllerController:: ControllerController::

Funzionalità di base per la gestione del flusso Funzionalità di base per la gestione del flusso dell’applicazionedell’applicazione

Gestione automatica e trasparente della sessioneGestione automatica e trasparente della sessione

ViewView::

Motore “ufficiale”: basato su NVelocityMotore “ufficiale”: basato su NVelocity

Motori in sviluppo: WebForm, StringTemplate, Boo…Motori in sviluppo: WebForm, StringTemplate, Boo…

Strumenti per la generazione di htmlStrumenti per la generazione di html

MonoRail components:MonoRail components:

ActionPackActionPack

Page 12: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

WebFormsWebForms:: ++: Infrastruttura basata su .NET: Infrastruttura basata su .NET

++: Supporto, documentazione, comunità di sviluppatori, ecc…: Supporto, documentazione, comunità di sviluppatori, ecc…

– – : Complessità nella creazione e manutenzione delle applicazioni: Complessità nella creazione e manutenzione delle applicazioni http://hammett.castleproject.org/?p=59http://hammett.castleproject.org/?p=59

“…“…my problem is that to do something that is more complex than just simply displaying one my problem is that to do something that is more complex than just simply displaying one form on a page ASP.NET gets pretty complicated. Events are firing all over the place. I have form on a page ASP.NET gets pretty complicated. Events are firing all over the place. I have to take viewstate into account… and then it became even more difficult to get stuff to to take viewstate into account… and then it became even more difficult to get stuff to respond the way I want them to respond. All in all it takes a really long time before I get respond the way I want them to respond. All in all it takes a really long time before I get something done properly….”something done properly….”

http://www.brianromanko.com/2006/10/aspnet-on-rails.htmlhttp://www.brianromanko.com/2006/10/aspnet-on-rails.html

““Part of the reason for Ruby on Rails' quick adoption is that it provides a solid framework for Part of the reason for Ruby on Rails' quick adoption is that it provides a solid framework for development that has enough features to keep us framework quasi-developers happy while development that has enough features to keep us framework quasi-developers happy while staying out of the way enough to make the framework work for the developer instead of staying out of the way enough to make the framework work for the developer instead of against them (CSLA anyone?). It's slick and sexy. It's the iPod of development frameworks.against them (CSLA anyone?). It's slick and sexy. It's the iPod of development frameworks.

MonoRail vs WebFormsMonoRail vs WebForms

Page 13: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

MonoRailMonoRail:: ++: Infrastruttura basata su ASP.NET, .NET e Castle: Infrastruttura basata su ASP.NET, .NET e Castle ++: Semplicità nella creazione e manutenzione delle : Semplicità nella creazione e manutenzione delle

applicazioniapplicazioni http://www.brianromanko.com/2006/10/aspnet-on-rails.htmlhttp://www.brianromanko.com/2006/10/aspnet-on-rails.html

Part of the reason for Ruby on Rails' quick adoption is that it provides a solid framework Part of the reason for Ruby on Rails' quick adoption is that it provides a solid framework for development that has enough features to keep us framework quasi-developers happy for development that has enough features to keep us framework quasi-developers happy while staying out of the way enough to make the framework work for the developer while staying out of the way enough to make the framework work for the developer instead of against them (CSLA anyone?). It's slick and sexy.instead of against them (CSLA anyone?). It's slick and sexy.

– – : Supporto, documentazione, comunità di sviluppatori, ecc…: Supporto, documentazione, comunità di sviluppatori, ecc… – – : View basate su NVelocity, Model e Controller basate su C# - : View basate su NVelocity, Model e Controller basate su C# -

VB.NETVB.NET

MonoRail vs WebFormsMonoRail vs WebForms

Page 14: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

DotNetMarche BookStoreDotNetMarche BookStore

Tutorial.Start()Tutorial.Start()

Page 15: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Domande?Domande?

Page 16: Sviluppo Web Agile con Castle MonoRail Diego Guidi diegoguidi@gmail.com DotNetMarche.Start() Giovedì 12 ottobre 2006.

Slide e MaterialeSlide e Materiale

www.dotnetmarche.orgwww.dotnetmarche.org

Grazie!Grazie!