di Ugo Lattanzi
Oggi voglio fare un po' di polemica, si parla di ORM e ci metto dentro NHibernate, EntityFramework e Linq To Sql (anche se per me non è un ORM).
Quando tempo fa su tutti i blog, forum, cene, ecc si parlava di NH, parecchie persone ne parlavano male o ne erano scettici, perchè ora queste persone usano e parlano di L2S o EF e sembrano non poterne fare a meno???
Forse sono fatti meglio di NH???
Non credo, almeno non per ora, magari le versioni future.
Sempre nelle stesse cene, discussioni, ecc, molti si lamentavano del fatto che in NH per le collection andava utilizzata l'interfaccia (es: IList<miaClasse>) e non potevano utilizzare le loro collection custom, mentre ora ci ritroviamo con EntitySet ed EntityRef che tra le altre cose non sono nemmeno serializzabili.
Ora perchè queste persone non si lamentano ??
Oggi sono in...zato come una bestia perchè sto litigando con il Domain sporco di tutte le robaccie di L2S che non sono serializzabili e mi danno problemi con la cache distribuita.
Voglio la PI, così almeno risparmio un botto di giornate lavorative per creare workaround che sporcano ancora di più il dominio.
Mi rivengono in mente le discussioni con il Cradle, e il Mostardone Nazionale in cui ci chiediamo a che cavolo serve l'attributo serializzable?? Ma non può essere tutto serializzabile e se voglio qualcosa di non serializzabile lo specifico io??
Ci voleva Microsoft per aprire le menti di certe persone, ora però speriamo che mettano la PI nelle versioni future ;)
Ciauz
>Però perdonatemi... ma che entityref/entitycollection
>o la rafcollection siano serializzabili o meno chissenefrega.
Io e non credo di essere l'unico.
In MTV abbiamo la cache distribuita su 10 Server Web, utilizzata da circa 50 servizi WCF sparsi tra i vari server e 30 applicazioni web (parliamo di 500k di oggetti in cache), e puoi capire perfettametne che per spostare un oggetto da un server ad un'altro questo necessità di serializzazione.
>ma realmente a qualcuno viene in mente di serializzare
>il grafo così com'è e di mandarlo via servizi da qualche parte?
Beh se devo passare una entity da un server ad un'altro si, ovviamente se il grafo ha una certa complessità va creato un DTO.
Sull'esporre il grafo di EF tramite WCF, sorvolo che forse è meglio.
Ma dove lo hai letto?? sono curioso :D
http://blogs.msdn.com/dsimmons/archive/2008/01/20/entitybag-part-i-goals.aspx
ben 6 puntate su come srializzare il grafo con WCF
saluti
Roberto
>Io e non credo di essere l'unico.
Ughetto, perdonami ma il tuo esempio non conta poichè è eccessivamente peculiare. Un po' come ebay che nel proprio case study dichiara di non usare primary/foreign key e di riconciliare "by code" ogni conflitto.
"Piegare" il design quando sei di fronte ad esigenze "estreme" è... "cosa buona e giusta" (cit.). Il problema è che il lettore meno esperto legge:
- il case study di e-bay
- i post su EF+WCF sul blog del(lo sciagurato) product team di EF
- i post del mitttttico "ughetto @ MTV" :-)
e pensa che, se lo dicono "loro", allora "si fa così". Ergo, l'eccezione diventa la regola, e IMVHO non va bene perchè così si fa + danno che altro.
Just my 2 (euro) cents :-)
Mah, veramente la necessità di serializzare il domain model non la vedo tanto campata in aria come cosa, eh... anzi, è un'esigenza piuttosto comune, senza stare a scomodare ebay: oltre al cache server, mi viene in mente anche un session server oppure la persistenza di un workflow, l'utilizzo di remoting in MBV per distribuire l'applicazione...
Non credo che chi fa il programmino della rubrica telefonica si interessi tanto a questi discorsi, però concorderete che lo stesso EF, che è pensato per uno scenario Enterprise, in realtà crea qualche difficoltà in più in questo senso.
Ciao :)
Si, ci voleva Microsoft. Perdona l'autocitazione:
"Probabilmente, l'avvento di "LINQ to Qualcosa" batterà questo fenomeno di
resistenza al cambiamento, perchè la disponibilità "out of the box" di un
toolkit di questo tipo e il supporto al mapping ofefrto da Visual Studio
saranno sbandierati nelle sessioni/demo dei vari eventi MS (e dintorni) e
quindi ciò che prima era "esoterico" diventerà di massa. Scommettiamo? :-)"
(presa da qui: http://forum.ugidotnet.org/b.asp?m=65446 )
E te lo dice un "pazzo" che, insieme a Janky, ha iniziato a sbatterci la testa nel 2004, ere (ICT parlando) geologiche fa. Sai che ti dico? La tua non è polemica, bensì... Realismo :-)
Ciao Maskio,
vedo che siamo in sintonia, sono convinto che la cosa si ripeterà con Unity, e noi che parliamo di NSpring, Castle e della DI in generale.
Resta il fatto che la gente che prima si lamentava di utilizzare IList<T> ora non si lamenta di utilizzare EntityRef.
imperugo ha scritto:
Resta il fatto che la gente che prima si lamentava di utilizzare IList<T> ora non si lamenta di utilizzare EntityRef.
no, la gente si lamentava di IList<T> e non si lamenta di usare il designer, ora. secondo te la maggior parte delle persone si fa il mapping a mano? te lo dico io: no!
Ok maskio,
sono d'accordo con te che la maggior parte delle persone non si faccia il mapping a mano, penso che siamo in pochi a farlo.
Resta il fatto che se penso al Mapping di EF mi metto le mani nei capelli
Ma questo non giustifica la lamentela sul utilizzo dell'interfaccia di NH.
Ora non vorrei deviare la discussione su NH vs EF o L2S perchè la mia non voleva essere una lamentela verso tali framework, ma verso le persone con i paraocchi!!!
Ricordo perfettamente una cena (janky presente) in cui è uscita una frase del tipo:
"NH non mi piace perchè non mi permette di farmi il dominio come voglio io, io voglio utilizzare la RafCollection e lui vuole l'interfaccia, quindi non lo uso."
Non era una persona nello specifico, ma diverse.
Ed ora mi chiedo:
Perchè non dicono che con EF o L2S vogliono utilizzare la RafCollection???
Il concetto si ferma qui.
Ciauz
Modificato da imperugo il 25 settembre 2008 14.17 -
forse perchè alcune delle cose che LINQ porta, intesi come Extension Method, gli rendono la cosa meno necessaria. non ne ho idea, perchè non ho mai usato le RafCollection, ma immagino sia questo il vero motivo.
Dico la mia...
il designer di Linq To Sql imho è più una sfiga che altro, provate ad utilizzarlo con un piccolo Domain Model di un centinaio di oggetti e ne riparliamo.
Utilizzare EntitySet per le collection è problematico per due ragioni
1) Non sono serializzabili
2) Non hanno un supporto completo per il databinding
Sul punto 1 ha parlato Ugo; il punto 2 è un non-problema, visto che nulla vieta di usare una collection wrapper (come la semplice BindingList<T> o la RafCollection, per l'appunto) che implementi tutte le interfacce necessarie al binding windows forms (o WPF). Credo che l'interrogativo di Ugo sia piuttosto: perchè lo stesso ragionamento non lo si faceva ai tempi di NH dato che le sue IList<T> erano comunque utilizzabili con lo stesso approccio?
Anyway, non è più un problema: da un po' NHibernate permette di utilizzare collection custom, quindi è sempre più avanti
Modificato da Cradle il 25 settembre 2008 15.40 -
Cradle [Staff] wrote:
il designer di Linq To Sql imho è più una sfiga che altro, provate ad utilizzarlo con un piccolo Domain Model di un centinaio di oggetti e ne riparliamo.
un mapping con LINQ to SQL fatto su 100 tabelle imho non è piccolo. è un cosetto fatto per non fare usare i DataSet a chi passa per caso a fare un'app. non dimenticatelo.
certo, se parliamo di EF, allora i limiti sono gravi, ma non ho mai sentito nessuno in Microsoft posizionare LINQ to SQL per il mercato enterprise. e per fortuna, sarebbero stati dei pazzi visto l'infinità di limiti, assurde restrizioni e comportamenti strani di cui è "dotato".
Anyway, non è più un problema: da un po' NHibernate permette di utilizzare collection custom, quindi è sempre più avanti
ma NH non è nel framework. tendete a dimenticare che ci sono "migliardi" di aziende che si rifiutano di utilizzare quello che è fuori dal framework. il punto è che è ovvio che NH è almeno 5-6 anni avanti ad EF/L2S, ma la massa non usa quello che è avanti, usa quello che trova già pronto (aka, gli spiegano ai roadshow, sulle riviste, sui libri, varie ed eventuali).
Credo che l'unico motivo di tutto ciò sia un po di sana propaganda e, soprattutto, l'integrazione in VisualStudio e tool di generazione vari. In sostanza un approccio iniziale meno ostico rispetto a quello necessario per NH. Tutto qui.
Poi avere la PI con Linq to SQL è abbastanza semplice, farla funzionare a dovere è un po più complicato
ciaoo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.




Stampa
Download
10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
Però perdonatemi... ma che entityref/entitycollection o la rafcollection siano serializzabili o meno chissenefrega.
ma realmente a qualcuno viene in mente di serializzare il grafo così com'è e di mandarlo via servizi da qualche parte?
"Don't distribute your objects". Punto e a capo.
Quando ho letto alcuni post del blog di uno dei dev del team di EF che parlava proprio di questo, sciorinando quant'è buono e quant'è bello il grafo che viaggia attraverso WCF e poi torna, mi sono saliti brividi freddi lungo la schiena e al mal di pancia si accompagnava l'agghiacciante prospettiova che questi svilupperanno anche la V2 di EF...
saluti
Roberto
Continua »»» | Rispondi »»»