Sviluppo Web Agile con Castle MonoRail Diego Guidi 1° Workshop DotNetMarche.Start () Giovedì 12 ottobre 2006
Sono io? Diego Guidi
Agile Web Application Framework MVC-Based Agile Web Application Framework MVC-Based Porting di Ruby On Rails Porting di Ruby On Rails Basato su architettura.NET e ASP.NET Basato 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… MonoRail
Ruby On Rails Buzzword del dopo Web 2.0 ovviamente! Buzzword del dopo Web 2.0 ovviamente! Ha imposto allattenzione di tutti Ruby come linguaggio di programmazione Ha imposto allattenzione di tutti Ruby come linguaggio di programmazione Ha imposto allattenzione di tutti un modello di programmazione agile Ha imposto allattenzione di tutti un modello di programmazione agile MonoRail recepisce ed estende Ruby On Rails MonoRail recepisce ed estende Ruby On Rails Fonte:
Molti nemici, molto onore… DJango: Python based DJango: Python based GRails: Java based GRails: Java based Akelos: PHP based Akelos: PHP based Flex On Rails:Flash/Flex based Flex On Rails:Flash/Flex based SubSonic: The Zero Code DAL SubSonic: The Zero Code DAL.NET based.NET based Estremamente automatizzato Estremamente automatizzato Poco flessibile (al momento…) Poco flessibile (al momento…)
Agile Web Application Framework MVC-Based MVC-Based: MVC-Based: Model: mantiene lo stato dellapplicazione e si occupa della persistenza sul database. Model: mantiene lo stato dellapplicazione e si occupa della persistenza sul database. View: responsabile della presentazione dei dati del modello e dellinterfaccia utente. View: responsabile della presentazione dei dati del modello e dellinterfaccia utente. Controller: gestisce l richieste dellutente, interagisce con il modello e richiama la vista corretta, a cui fornisce i dati da visualizzare. Controller: gestisce l richieste dellutente, interagisce con il modello e richiama la vista corretta, a cui fornisce i dati da visualizzare. Separazione dei compiti Ogni cosa al suo posto!
Agile Web Application Framework MVC-Based MVC-Based: MVC-Based: - home: controller - index: action (metodo) del controller home del controller home - index: view associata al controller home 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 sullapplicazione e non sullinfrastruttura. AGILE: promuove un modello di sviluppo che, automatizzando i task ripetitivi, permette allo sviluppatore di concentrarsi sullapplicazione e non sullinfrastruttura. Convention Over Configuration: limitare al minimo la necessità di file di configurazione, favorendo al contrario le convenzioni. Convention Over Configuration: limitare al minimo la necessità di file di configurazione, favorendo al contrario le convenzioni. DRY (Dont Repeate Yourself): evitare le ripetizioni di codice favorendo la condivisione. DRY (Dont Repeate Yourself): evitare le ripetizioni di codice favorendo la condivisione. Test Support: supporto per i test funzionali (controller). Test Support: supporto per i test funzionali (controller).
Costruzione di un progetto di base con Castle MonoRail Applicazione Demo
Rappresenta la parte Model di MonoRail Rappresenta la parte Model di MonoRail Implementazione del pattern ActiveRecord: 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 EAA)An object that wraps a row in a database table, encapsulates the database access, and adds domain logic on that data. (Fowler, Patterns of EAA) Basato su NHibernate Basato su NHibernate Persistenza gestita tramite meta-programmazione (attributi) Persistenza gestita tramite meta-programmazione (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 automatiche Operazioni CRUD automatiche Disponibile anche separatamente da MonoRail Disponibile anche separatamente da MonoRail MonoRail components: ActiveRecord
Rappresenta la parte View e Controller: Rappresenta la parte View e Controller: Controller: Controller: Funzionalità di base per la gestione del flusso dellapplicazione Funzionalità di base per la gestione del flusso dellapplicazione Gestione automatica e trasparente della sessione Gestione automatica e trasparente della sessione View: View: Motore ufficiale: basato su NVelocity Motore ufficiale: basato su NVelocity Motori in sviluppo: WebForm, StringTemplate, Boo… Motori in sviluppo: WebForm, StringTemplate, Boo… Strumenti per la generazione di html Strumenti per la generazione di html MonoRail components: ActionPack
WebForms: WebForms: +: 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 …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: MonoRail: +: Infrastruttura basata su ASP.NET,.NET e Castle +: Infrastruttura basata su ASP.NET,.NET e Castle +: Semplicità nella creazione e manutenzione delle applicazioni +: Semplicità nella creazione e manutenzione delle applicazioni 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 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… – : Supporto, documentazione, comunità di sviluppatori, ecc… – : View basate su NVelocity (ma è davvero un problema?...) – : View basate su NVelocity (ma è davvero un problema?...) MonoRail vs WebForms
DotNetMarche BookStore Tutorial.Start()
Generazione automatica dellintelaiatura di base del sito web Task 1: Scaffolding
Personalizzazione dellintelaiatura di base generata tramite Scaffolding Task 2: Creazione della parte Admin
Introduzione della validazione nel modello dei dati Task 3: Validazione
Generazione manuale della parte del sito dedicata alla vendita dei nostri prodotti Task 4: Creazione della parte Store
Gestione degli errori e delle eccezioni Task 5: Gestione degli errori
Creazione della fase di ordinazione e pagamento Task 6: Gestione degli ordini
Una migliore gestione della fase di ordinazione tramite lutilizzo dei ViewComponents Task 7: I componenti di MonoRail
Creazione della fase di spedizione degli ordini Task 8: La fase di spedizione
Una migliore gestione della fase di spedizione tramite il FormHelper Task 9: La fase di spedizione - 2
Creazione e aggiunta degli utenti admin Task 10: Creazione della parte Login
Abilitazione della gestione degli utenti Task 11: Gestione del Login
Limitazione dellaccesso alla parte di amministrazione ai soli utenti admin Task 12: Introduzione ai Filters
Completamento del progetto con la correzione di alcune imperfezioni Task 13: Finalizzazione del sito web
Introduzione al supporto per i test offerto da MonoRail Task 14: Testiamo il tutto!
Il supporto ad Ajax in MonoRail Task 15: The Web, version 2.0
MonoRail è in continua evoluzione… MonoRail è in continua evoluzione… Caching Caching Generator Generator Migrate Migrate Dynamic compiling Dynamic compiling Occhio a Marc-Andre! Ed a Ayende! Oltre ovviamente a… Tutto qui?
Domande?
Slide e Materiale Grazie!