Il Domain Model

di Ugo Lattanzi

Orami in tutte le mie applicazioni realizzo un Domian Model sia che queste siano complesse che non.

Ora Fowler ci dice:

An object model of the domain that incorporates both behavior and data.

ed è tutto giustissimo il Domain sarà un contenitore di dati disconnesso e, nel caso avere delle implementazioni interne, ma non dovrebbe scostarsi di più da ciò.

Un'ulteriore caratteristica che dobbiamo rispettare è che il Domain deve essere quello a prescindere dal tipo di applicazione che si andrà a realizzare (Web Application, WinForm, Mobile, ecc) e dal tipo di strato dati, che sia NHibernate o un provider custom, xml o quel che volete.

Detto questo mi chiedo:
ma è giusto implementare nel domain l'interfaccia INotifyPropertyChanged dato che un'applicazione ASP.NET non sa che farsene, inoltre è giusto implementare Collection<T> per le nostre collezioni quando per un DataBinding su WinForm sarebbe più giusto utilizzare BindingList<T>???

Ora dato che ogni tipo di applicazione richiede delle caratteristiche diverse per il proprio Domain forse è il caso che queste tipo di implementazioni vengano fatte nella UI dell'applicazione e non nel Domain rischiando di avere implementazioni "pesanti" che non verrano mai utilizzate perchè il tipo di applicazione su cui gira il Domain non le richiede.

Per esempio se andiamo ad analizzare BindingList<T> e Collection<T> entrambe implementano l'interfaccia IList<T>.

Quello che mi chiedo io non è il caso che nel Domain per gestire le collection si utilizzi una sintassi del tipo:

 IList roles = new List<T> 

e l'interfaccia INotifyPropertyChanged venga implementata nel UI che la richieda e non nel Domain in modo da avere un domain "perfetto" per ogni tipo di applicazione??

Una parte di questo mio dubbio è risolvibile utilizzando un oggetto per WinForm che come dice il sito stesso:

A library to facilitate DataBinding in .NET Windows.Forms.

dimenticavo il Link.

Commenti
PadovaBoy scrive:
Il Domain Model

Scusate se mi "intrufolo" di frodo nella conversazione ma sono affascinato dalla discussione.
Però la verità è che ci capisco poco.
In effetti non so cosa sia un Domain model, ma non so perchè mi suona molto vicino ai Design Pattern.
Ne sono ignorante e vorrei conoscerne qualcosa...che consigliate?
Qualche libro interessante sull'argomento?

Grazie mille :)
10/09/2006 ore 2.41 | 1 risposta
»»»» imperugo scrive:
Re: Il Domain Model

Beh direi che meglio di PEEA di Martin Fowler non puoi scegliere di meglio.
Direi la bibbia per queste cose.
lo trovi qui

http://www.amazon.co.uk/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/sr=8-1/qid=1157913986/ref=pd_ka_1/026-0376432-5181259?ie=UTF8&s=gateway

Inoltre ti consiglio il 18 e 19 ottobre di venire a Milano
http://www.ugidotnet.org/workshops/workshops_detail.aspx?ID=9ed3a5e7-a69c-4258-af7b-6ec3a8bcd025

Io ci sarò, ci sarà anche ricky che tiene una sessione.
Se vieni ci vediamo su.

byez
10/09/2006 ore 20.54
mauroservienti scrive:
Il Domain Model

Ciao,

> ma è giusto implementare nel domain l'interfaccia INotifyPropertyChanged dato
> che un'applicazione ASP.NET non sa che farsene, inoltre è giusto implementare
> Collection<T> per le nostre collezioni quando per un DataBinding su WinForm
> sarebbe più giusto utilizzare BindingList<T>???

Io personalmente credo di si se stai costruendo un Object Model che aspira ad essere utilizzabile ovunque, non vedo altro posto, metterla in un eventuale ObjectViewItem sarebbe improponibile perchè quest'ultimo non avrebbe modo di essere notificato dall'oggetto per cui fa *View di eventuali modifiche rendendo quindi di fatto impossibile il bubbling della notifica agli strati superiori.

Asp.NET non sa che farsene di INotifyPropertyChanged ma di certo non si arrabbia se c'è, inoltre potresti specializzare il codice che solleva l'evento per determinare se sei in un contesto web nel qual caso inibisci il meccanismo

In linea generale poi non amo bruciarmi l'ereditarietà singola del fx quindi preferisco implementarmi tutte le interfacce piuttosto che "risparmiare" codice derivando da un classe base che mi serve a "poco"

Per quel che riguarda le ObjectView, io mi sono costruito la mia gerarchia di classi e sono semplicemente soddisfattissimo, proprio soddisfattissimo.

Ciao
.m
07/09/2006 ore 14.57 | 3 risposte
nostromo scrive:
Re: Il Domain Model

personalmente ho preferito non pensare alla presentazione del Domain Model.

mi limito a creare le classi che descrivono il mio dominio.

sto cambiando molto la mia filosofia di progettazione ultimamente...

ciao marco
07/09/2006 ore 15.28
»»»» imperugo scrive:
Re: Il Domain Model

>sto cambiando molto la mia filosofia di progettazione ultimamente...

:D, anche io, vediamo se ad ottobre Ricky e compagnia ci daranno qualche dritta.

Ne sono certo ;)
09/09/2006 ore 1.16
»»»» imperugo scrive:
Re: Il Domain Model

Ciao Mauro, prima di tutto grazie per la risposta e a seguire per il tuo parere ovviamente molto apprezzato.

Tornando al nostro discorso verissimo tutto ciò che dici tu, io posso implementare INotifyPropertyChanged che è anche "leggera", sia come implementazione che come risorsa e se sono in un ambiente asp.net lui se ne frega e tutto ok, al massimo posso implementare un controllo che nel caso mi trovo in ambiente Web, non effettuo la chiamata al metodo, come da te giustamente detto.

Per ciò che riguarda le interfacce IList<T> invece di una collection tipicizzata, l'idea mi era nata guardando l'utilizzo dei NHibernate che le richiede per poter funzionare, ma non mi è sembrata strana come richiesta ed infatti ne è nato il post.
In più io di solito non lavoro mai winform, ma ultimamemente mi ci sono imbattuto ed ho notato che forse BindingList<T> era più corretto di una Collection<T>, e di conseguenza l'idea di usare un'interfaccia e di creami uno strato ad hoc nel layer di presentazione.
Ora in rete ho trovato questo post di Janky http://blogs.ugidotnet.org/janky/archive/2006/06/14/42877.aspx che mi lascia ancora più dubbi di quanti ne avevo ROTFL.

grazie ancora

P.S.: ore 1:22, giornata pienissma, potrei aver scritto cavolate, nel caso perdonami :)
09/09/2006 ore 1.27

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

Nella stessa categoria
I più letti del mese
TagCloud
BLOG INFO
  • 75 post, 51 commenti, 11 trackback
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom
IN EVIDENZA