sviluppo web agile con castle monorail
TRANSCRIPT
Sviluppo Web Agile con Sviluppo Web Agile con
Castle MonoRailCastle MonoRail
Diego GuidiDiego [email protected]@gmail.com
1° Workshop 1° Workshop “DotNetMarche.Start ()”“DotNetMarche.Start ()”Giovedì 12 ottobre 2006Giovedì 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
Agile Web Application Framework MVC-BasedAgile Web Application Framework MVC-Based
Porting di Ruby On RailsPorting di Ruby On Rails
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
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 Ruby On RailsMonoRail recepisce ed estende Ruby On Rails
Fonte: http://radar.oreilly.com/archives/2006/08/programming_language_trends_1.html
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
Agile Web Application Agile Web Application Framework MVC-BasedFramework MVC-Based
MVC-BasedMVC-Based::
ModelModel: mantiene lo stato dell’applicazione e si occupa della : mantiene lo stato dell’applicazione e si occupa della persistenza sul database.persistenza sul database.
ViewView: responsabile della presentazione dei dati del modello : responsabile della presentazione dei dati del modello e dell’interfaccia utente.e dell’interfaccia utente.
ControllerController: gestisce le richieste dell’utente, interagisce con : gestisce le richieste dell’utente, interagisce con il modello e richiama la vista corretta, a cui fornisce i dati il modello e richiama la vista corretta, a cui fornisce i dati da visualizzare.da visualizzare.
Separazione dei compiti
Ogni cosa al suo posto!
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
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).
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 EAA)Patterns of EAA)
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 automaticheOperazioni CRUD automatiche
Disponibile anche separatamente da MonoRailDisponibile anche separatamente da MonoRail
MonoRail components:MonoRail components:
ActiveRecordActiveRecord
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
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 : Complessità nella creazione e manutenzione delle applicazioniapplicazioni
http://hammett.castleproject.org/?p=59http://hammett.castleproject.org/?p=59
“…“…my problem is that to do something that is more complex than just 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. simply displaying one form on a page ASP.NET gets pretty complicated. Events are firing all over the place. I have to take viewstate into account… 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 respond the way I 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 want them to respond. All in all it takes a really long time before I get something done properly….”something done properly….”
MonoRail vs WebFormsMonoRail vs WebForms
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 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 framework for development that has enough features to keep us framework quasi-developers happy while staying out of the way enough to make the quasi-developers happy while staying out of the way enough to make the framework work for the developer instead of against them (CSLA anyone?). framework work for the developer instead of against them (CSLA anyone?). It's slick and sexy.It's slick and sexy.
– – : Supporto, documentazione, comunità di sviluppatori, ecc…: Supporto, documentazione, comunità di sviluppatori, ecc…
– – : View basate su NVelocity (ma è davvero un problema?...): View basate su NVelocity (ma è davvero un problema?...)
MonoRail vs WebFormsMonoRail vs WebForms
DotNetMarche BookStoreDotNetMarche BookStore
Tutorial.Start()Tutorial.Start()
MonoRail è in continua evoluzione…MonoRail è in continua evoluzione…
CachingCaching
GeneratorGenerator
MigrateMigrate
Dynamic compilingDynamic compiling
Occhio a Marc-Andre!Occhio a Marc-Andre! http://macournoyer.wordpress.comhttp://macournoyer.wordpress.com
Ed a Ayende! Ed a Ayende! http://www.ayende.com/bloghttp://www.ayende.com/blog
Oltre ovviamente a…Oltre ovviamente a… http://www.castleproject.orghttp://www.castleproject.org
Tutto qui?Tutto qui?
Domande?Domande?
Slide e MaterialeSlide e Materiale
www.dotnetmarche.orgwww.dotnetmarche.org
Grazie!Grazie!