Sviluppo Web Agile con
Castle MonoRail
Diego Guidi
[email protected]
1° Workshop “DotNetMarche.Start ()”
Giovedì 12 ottobre 2006
Sono io?
Diego Guidi
http://dotnetmarche.org/members/D_Guidi.aspx
 http://nts.sourceforge.net
 http://blogs.ugidotnet.org/GisSharpBlog
 http://lacorrente.blogspot.com
 [email protected]

Oggi parliamo di…
MonoRail

Agile Web Application Framework MVC-Based

Porting di Ruby On Rails

Basato su architettura .NET e ASP.NET

Parte del “Castle Project”

Licenza: “Apache License, Version 2.0”

Non legato a MONO!
Ruby On Rails




Buzzword del 2006 - dopo Web 2.0 ovviamente!
Ha imposto all’attenzione di tutti Ruby
come linguaggio di programmazione
Ha imposto all’attenzione di tutti un modello
di programmazione “agile”
MonoRail recepisce ed estende RoR
Fonte: http://radar.oreilly.com/archives/2006/08/programming_language_trends_1.html
Molti nemici, molto onore…

DJango:
GRails:
Akelos:
Flex On Rails:

SubSonic: The Zero Code DAL







Python based
Java based
PHP based
Flash/Flex based
.NET based
Estremamente automatizzato
Poco flessibile (al momento…)
http://www.codeplex.com/Wiki/View.aspx?ProjectName=actionpack
Agile Web Application Framework
MVC-Based

MVC-Based:



Model: mantiene lo stato dell’applicazione e si occupa della
persistenza sul database.
View: responsabile della presentazione dei dati del modello e
dell’interfaccia utente.
Controller: riceve gli eventi dall’utente, interagisce con il
modello e richiama la vista corretta.
Separazione dei compiti
Ogni cosa al suo posto!
Agile Web Application Framework
MVC-Based

MVC-Based: http://localhost:81/home/index.rails
- home: controller
- index: action (metodo)
del controller home
- index: view associata
al controller home
Agile Web Application Framework
MVC-Based

AGILE:



promuove un modello di sviluppo che, automatizzando
i task ripetitivi, permette allo sviluppatore di
concentrarsi sull’applicazione e non sull’infrastruttura.
Convention Over Configuration: limitare al minimo la
necessità di file di configurazione, favorendo al contrario le
convenzioni.
DRY (Don’t Repeate Yourself): evitare le ripetizioni di codice
favorendo la condivisione.
Test Support: supporto per i test funzionali (controller).
Applicazione Demo
Costruzione di un progetto di base con
Castle MonoRail
MonoRail components:
ActiveRecord

Rappresenta la parte Model di MonoRail

Implementazione del pattern ActiveRecord:
“An object that wraps a row in a database table, encapsulates the database
access, and adds domain logic on that data.” (Fowler, Patterns of EEA)


Basato su NHibernate

Persistenza gestita tramite meta-programmazione (attributi)

Non è necessario scriversi i file di mapping!

Validazione semi-automatica, gestita tramite attributi.

Operazioni CRUD ereditate dalle classi base.
Disponibile anche separatamente da MonoRail
MonoRail components:
ActionPack

Rappresenta la parte View e Controller:

Controller:



Funzionalità di base per la gestione del flusso
dell’applicazione
Gestione automatica e trasparente della sessione
View:

Motore “ufficiale”: basato su NVelocity

Motori in sviluppo: WebForm, StringTemplate, Boo…

Strumenti per la generazione di html
MonoRail vs WebForms

WebForms:

+: Infrastruttura basata su .NET

+: Supporto, documentazione, comunità di sviluppatori, ecc…

– : Complessità nella creazione e manutenzione delle applicazioni
http://hammett.castleproject.org/?p=59
“…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 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 something done properly….”
MonoRail vs WebForms

MonoRail:

+: Infrastruttura basata su ASP.NET, .NET e Castle

+: Semplicità nella creazione e manutenzione delle applicazioni
http://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 development that has enough features to keep us framework quasidevelopers happy 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.

– : Supporto, documentazione, comunità di sviluppatori, ecc…

– : View basate su NVelocity (ma è davvero un problema?...)
Tutorial.Start()
DotNetMarche BookStore
Task 1: Scaffolding
Generazione automatica dell’intelaiatura
di base del sito web
Task 2: Creazione della parte “Admin”
Personalizzazione dell’intelaiatura
di base generata tramite Scaffolding
Task 3: Validazione
Introduzione della validazione
nel modello dei dati
Task 4: Creazione della parte “Store”
Generazione manuale della parte del sito
dedicata alla vendita dei nostri prodotti
Task 5: Gestione degli errori
Gestione degli errori e delle eccezioni
Task 6: Gestione degli ordini
Creazione della fase di ordinazione
e pagamento
Task 7: I “componenti” di MonoRail
Una migliore gestione della fase di ordinazione
tramite l’utilizzo dei “ViewComponents”
Task 8: La fase di spedizione
Creazione della fase di spedizione degli ordini
Task 9: La fase di spedizione - 2
Una migliore gestione della fase
di spedizione tramite il “FormHelper”
Task 10: Creazione della parte “Login”
Creazione e aggiunta degli utenti “admin”
Task 11: Gestione del “Login”
Abilitazione della gestione degli utenti
Task 12: Introduzione ai “Filters”
Limitazione dell’accesso alla parte
di amministrazione ai soli utenti “admin”
Task 13: Finalizzazione del sito web
Completamento del progetto con la
correzione di alcune “imperfezioni”
Task 14: Testiamo il tutto!
Introduzione al supporto per i test
offerto da MonoRail
Task 15: The Web, version 2.0
Il supporto ad Ajax in MonoRail
Tutto qui?

MonoRail è in continua evoluzione…

Caching

Generator

Migrate

Dynamic compiling
Occhio a Marc-Andre!
Ed a Ayende!
Oltre ovviamente a…
http://macournoyer.wordpress.com
http://www.ayende.com/blog
http://www.castleproject.org
Domande?
Slide e Materiale
www.dotnetmarche.org
Grazie!
Scarica

Agile Web Application Framework MVC-Based - monorail