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!