Archietettura tipica, Domain Model, data & behaviour... WTF?

il WTF non ha niente a che vedere con acronimi informatici, sta semplicemente per What the fuck!?

Veniamo al senso di questo post:

Per abitudine nei miei progetti separo le entità del mio dominio in una classe a se e queste entità sono classi semplici senza behaviours, i behaviours eventuali li implemento in classi apposite

Ipotizziamo quindi un'eventuale entità Ordine, nel mio caso il dato viene recuperato dal DAL e inserito nella mia classe Order presente nel progetto "Entities", mentre i behaviours li inserisco in un repository, ipotizziamo quindi in una classe BizOrder che implementa i soliti metodi GetXxxx e il CRUD in generale (in questa classe vengono invocati poi i metodi del DAL e quindi di conseguenza faccio uso delle classi DataMapper, ad esempio nel mio caso una classe DataOrder)

In sostanza io ho una situazione di questo tipo:
progetto Entities
progetto DAL
progetto Business
progetto Presentation (Presentation.WEB, Presentation.WinForm, etc...)

ora per comodità evito il concetto del progetto Service, spesso può essere inglobato nel Business o astratto in un progetto a se sottoforma di webservice o classi piane che in futuro potrebbero essere wrappate da un Ajax Server Layer o altre amenità varie. btw in questo progetto potrei fare uso di DTO

Spesso tra i vari strati comunico con le entità di dominio(progetto Entities), implementato tecniche di Lazy Loading nel DAL (classi interne al DAL, che ereditano dall'entity di base facendo l'override delle proprietà legate ad altre entità o collection di entità ed implementano il Lazy Load)

Tirando le somme, implemento progetti con dipendenze strette, ad eccezione del progetto "Entities" che è conosciuto trasversalmente da tutti gli strati:

Presentation conosce Business e Entities
Business conosce DAL e Entities
DAL conosce Entities

Entities non conosce una cippa

In sostanza le mie classi di dominio sono solo data, senza behaviour e mi chiedo se questo possa essere visto come un'astrazione eccessiva.

Mi cheido questo dopo aver letto un articolo con spunti interessanti, nel quale Andrea suggeriva di unire data & behaviour

Se non ho mal interpretato quanto letto, si faceva un appunto in merito al fatto che con dati e comportamenti divisi in classi diverse, non si poteva scrivere codice LINQ nel caso in cui una proprietà calcolata fosse implementata alla classe rappresentante l'entità (ipotizziamo nel mio caso alla BizOrder con un metodo IsHuge che mi restituisce true se l'ordine è da un 1 milione di euro in totale, regola idiota inventata sul momento)

La mia domanda è la seguente: se l'ipotetico metodo IsHuge lo implementassi come Extension della classe Order, non avrei comunque modo di utilizzare LINQ con una query tipo "from order in orders where order.IsTop() select order" ?

In questo modo supererei i limiti del behaviour in classi di business apposite e potrei sfruttare il progetto Entities per altri eventuali progetti nei quali la business rules non è più valida o varia (anche se a dirla tutta probabilmente non ci sarebbero molti casi reali di riutilizzo del progetto)... comunque eviterei di dover fare refactoring della soluzione qualora io volessi utilizzare LINQ in modo esteso nelle mie classi di servizio

Sbaglio qualcosa nel ragionamento?

chi non muore si rivede...

Dopo qualche anno lontano da qui, preso tra lavori, sport, etc... ho deciso di far rivivere un po' questo blog.

Vediamo che sia di buon auspicio anche per il mio portale che ormai sono un paio di anni che è offline

Cavolo, mi scuso con tutti gli utenti ma il fallimento di ITHost, mio ex servizio di hosting, mi ha mangiato via buona parte dei dati e buona parte delle buone intenzioni di riportare tutto UP e unito allo scarso tempo a disposizione il risultato è stato ... redangel.it.it down

Detto questo, io come lavoro sono consultant, o al giorno d'oggi forse il nome giusto sarebbe Software Architect o roba varia... e ultimamente, come mezzo di confronto sto leggendo il libro di Esposito e Saltarello "Architecting Application For Enterprise" (in inglese of course, non so neanche se c'è la versione italiana), lo sto leggendo come fosse un romanzo e sono alla parte del Service Layer, dove probabilmente scoprirò il maggiordomo nell'atto di lanciare il candelabro sulla testa della futura vittima.

Ne approfitto per fare i complimenti agli autori (per quanto ho letto fin'ora) perchè lo stile è competente ma non troppo serioso, un po' come il sottoscritto :D (mai prendersi troppo sul serio dico io!)

Ora vado un po' a rivedere del codice che dei programmatori di un mio cliente stanno scrivendo... Lasagna style!

Inauguro il blog!!

Inauguro questo blog, con nessun intervento degno di nota, l'intelligenza il lunedi` mattina e` merce rara!
Nel frattempo nei momenti di pausa ne approfitto per smanettare un po' su questo blog.

Vabbe`, un'informazione utile provo a dirla, nel caso a qualcuno sia sfuggito:
Il 13 Gennaio Telligent System (la societa` guidata da Rob Howard, ex Program Manager di ASP.NET) ha rilasciato la Beta 3 del loro Community Server, un'unione tra il loro originario progetto, ASP.NET Forum (che aveva raggiunto la release 2.0.1), nGallery e .Text

In attesa del rilascio ufficiale, il risultato del loro lavoro potete testarlo scaricando appunto la beta 3 (per ora priva di sorgenti)

Da parte mia penso proprio che utilizzero` la loro web application anche nel mio portale sulla programmazione (per ora uso il loro forum, anche se non sono proprio pienamente soddisfatto)

Vedremo con Community Server!

«April»
SunMonTueWedThuFriSat
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456