venerdì 26 novembre 2010

Enterprise Design: il sito non bastava - parte 2

La lettura del libro "Professional Asp.Net Design Patterns" mi ha portato a riflettere su come organizzare un progetto che fosse più adeguato alle esigenze dell'azienda.

La soluzione di Visual Studio è composta da 6 progetti. I primi cinque sono librerie di classi, l'ultimo è un'applicazione web MVC 2.

I progetti descrivono anche i vari strati in cui ho diviso la soluzione.
Si parte dalla libreria "Model" che contiene le classi che descrivono le entità del dominio. Nel mio caso: il negozio, il prodotto, le categorie merceologiche, il marchio, le categorie editoriali. La libreria si occupa di modellare il comportamento di questi oggetti, con la validazione dei dati.

La persistenza dei dati è gestita tramite le classi del Repository. In questo caso ho implementato un pattern noto cercando di ottenere il massimo disaccoppiamento della base di dati concreta. Questo è ottenuto con l'utilizzo di Interfacce ad esempio la persistenza dell'entità categoria merceologica viene gestita da una classe categoryRepository e dall'interfaccia ICategoryRepository. Gli altri strati utilizzeranno chiamate a metodi dell'interfaccia e non avranno in alcun modo bisogno di sapere quale e' l'implementazione concreta di essi.

La libreria AppService contiene le classi siteservice e shopservice che sono le due classi fondamentali: shopservice in pratica realizza l'API del sistema esponendo tutti i metodi utilizzati dall'applicazione, la classe siteservice adatta questi metodi alla visualizzazione sul sito sfruttando delle classi mapper tra gli oggetti del dominio e le classi dello strato di presentazione.

La libreria ViewModel contiene la modellizzazione dei dati necessari alla visualizzazione delle pagine del sito per ora, ma infuturo potrà contenere visualizzazioni diverse dalla pagina web. Le Pagine derivano dalla classe BaseView che in pratica contiene gli oggetti comuni a tutte le pagine.

Infine la libreria Infrastructure che contiene classi per lo più statiche e che implementano metodi o servizi comuni.

Ultimo progetto è l'applicazione web asp.net mvc 2. Su questo non c'e' molto da aggiungere se non che i controller chiameranno istanze della classe siteservice con il compito di istanziare la giusta classe del viewmodel passata come modello alla view del sito.

Nel prossimo appuntamento un pò di teoria

Nessun commento: