Vorrei elencare un paio di cose che ho implementato nel progetto asp.net corrente e magari poter confrontare questa architettura con altre...per la serie non si finisce mai di imparare :)
1) generazione custom entities con CodeSmith
- genero le classi per ogni tabella, a parte le tabelle di relazione m-n
2) generazione stored procedure e viste logiche con CodeSmith
- genero le stored procedure di insert/update/delete per ogni custom entities
- genero la vista select base (con associate join alle tabelle in relazione) per ogni custom entities
3) utilizzo degli Attributes di .net per mappature delle custom entities
- ogni proprietà pubblica delle custom entities corrisponde ad un campo della tabella corrispondente
- per ogni custom entitiy mappo stored procedure e vista di select base
4) Data Access Layer
- abstract factory pattern per consentire provider dati diversi
- utilizzo Reflection per gestire in automatico i metodi insert/update/delete
- utilizzo Reflection per caricare in automatico l'entità singola e l'entità collection
- non utilizzo Enterprise Library per accesso a sql server, ma una classe helper leggermente modificata rispetto
a quella del data access application block 2.0
- gestisce in automatico ordinamento e paginazione
- attraverso un attributo specifico per ogni metodo la query che deve essere eseguita.
5) Domain Layer
- classi specializzate per ciascuna entità o gruppi di entità dello stesso dominio che si interfacciano direttamente
con il DAL.
- comunicazione con il DAL e con l'UI sempre tramite le custom entities.
- i metodi eseguono le validazioni "di business"
6) UI
- sistema tipo master page per le pagine aspx.
- sistema a template(web part) per gli ascx
- implementazione GridView e gestione theme sulla gridview(il tema è un file xml che viene tradotto in codice
compilato a runtime ed utilizzato sovrascriverne gli attributi.Preso spunto da articolo di Dino Esposito su msdn)
- sicurezza gestita forms authentication e tramite asp.net roles e da codice
- crypting querystring
I benefici di questa architettura dovrebbero essere almeno questi:
- ho già pronte stored e viste perfette per una buona percentuale dei casi
- non devo quasi mai scrivere codice diretto per la lettura o scrittura dei dati su sql server
- non devo preoccuparmi di gestire paginazione e ordinamento, è sufficiente passare i parametri di paginazione e ordinamento ai metodi del Domain Layer che a sua volta li gira al DAL che in automatico li gestisce.
- se cambia la struttura, rigenero le custom entities, le viste e le stored procedure base
Per quanto riguarda le performance, l'unico collo di bottiglia è reflection quando deve valorizzare le custom entities dalle query sql.
Vedremo con il proseguio del progetto se avremo i benefici prospettati, di più o di meno di quanto previsto.
Speriamo di più :)