.Net 2.0
Una raccolda di post sul nuovo framework di casa Microsoft
			
				
				
				Premessa: ciò che scriverò è una banalità, ma secondo me in tanti non ne sono al corrente o non ci pensano. Di cosa parlo? Di cose del genere:  public const int MyConst = 10;
Il danno potenziale che le costanti pubbliche possono creare alla stabilità delle nostre applicazioni è enorme.
Why? Perché le costanti non sono altro che placeholder risolti in fase di compilazione. Questo vuol dire che, finché non si ricompila, il valore non viene aggiornato.
Implicazioni?
Assembly A che definisce una costante MyConst = 10
Assembly B che referenzia Assembly A e ne utilizza MyConst
Assembly A cambia MyConst a 15
Finché non ricompilo...
				
				
			 
	
			
				
				
				Dopo il mio precedente lavoro su NHibernate, oggi Aspitalia.com ha pubblicato un mio nuovo articolo sul multithreading. Grazie mille a Daniele per lo spazio che mi ha concesso e a Ricky per la pazienza nel correggerlo! Technorati tags: Articoli, Multithreading, ASP.NET
				
				
			 
	
			
				
				
				Chi l'avrebbe mai detto che un programmino fatto in un weekend per utilizzo personale riscuotesse tutto questo successo... L'hanno provato Simone e addirittura Phil Haack, e entrambi ne hanno parlato benone nei loro blog, convincendomi a farlo diventare un progetto open source a cui si sono aggiunti come committer!! Detto, fatto, lo trovate su Google Code, rinominato per l'occasione come Blog Commander (BlogManager era già utilizzato e faceva anche un filo schifo!!). Chi vuole apportare migliorie, mi droppi una mail! Ciao!  Technorati tags: Blog Commander, Tools
				
				
			 
	
			
				
				
				Bene, allora la nuova versione di Blog Manager (il nome è uno schifo, lo so) fa per voi! Qualche post fa, se ricordate, vi ho raccontato di un piccolo tool realizzato dal sottoscritto che, grazie ad un'interfaccia simil-Explorer, consente di riorganizzare velocemente tutte le categorie del blog facendo uso dei MetaWeblog API. Mi è sembrato così comodo che, dopo essere stato lì a compiacermi come un fesso (e senza cambiare le categorie), mi son detto: "ma perchè non fare lo stesso anche per i Technorati Tags, che son così pallosi da inserire nei post vecchi che ne sono sprovvisti? In...
				
				
			 
	
			
				
				
				La scorsa domenica ho dedicato un paio d'ore di tempo alla realizzazione di un piccolo tool per la gestione delle categorie sul blog, di cui parlerò più approfonditamente tra un paio di giorni (appena riesco ad ultimarlo). Come sa chiunque utilizzi abitualmente Windows Live Writer, SubText, il vecchio .Text e altri blog engine espongono una serie di servizi remoti chiamati MetaWeblog API (qui un piccolo white paper), raggiungibili all'URL  http://[blogurl]/services/metablogapi.aspx Il protocollo utilizzato è XML-RPC (qui maggiori informazioni) ed è basato su uno standard di comunicazione estremamente più semplice dei Web Service tradizionali. Non trattandosi di SOAP, però, essi non sono direttamente...
				
				
			 
	
			
				
				
				E' sicuramente una best practice quella di chiudere un datareader quando questo è stato utilizzato. Consideriamo però il seguente snippet di codice:  DBConnection connection;
using (connection = factory.CreateConnection())
{
    DBCommand cmd = connection.CreateCommand();
    // some code
    DBDataReader dr = cmd.ExecuteReader();
    // some code
}
Console.WriteLine(connection.State);
Il cursore non viene esplicitamente chiuso, questo è vero, ma viene comunque invocata la dispose della connection verso il DB.
Con SqlClient questo snippet funziona come previsto, stesso dicasi per OleDbClient e per Oracle.DataAccess: lo snippet stampa "Closed" sulla console e, se si disabilita il connection pool, si...
				
				
			 
	
			
				
				
				Vediamo se riesco... dato che comunque mi sembra piuttosto simile al vecchio 70-316 che ho superato circa un annetto fa, ho pensato di dare un'accelerata drastica ai miei studi e sostenerlo entro il mese di gennaio. Chissà se ce la farò! In ogni modo, ho appena acquistato i test su MeasureUp; cavoli, certo che 55€ per la versione online di 30gg non è proprio a buon mercato!!
				
				
			 
	
			
				
				
				Prendo spunto dai post di Lorenzo e di Raffo per segnalarvi un bell'articolo di MSDN Magazine di Gennaio di James Kovacs a proposito dei memory leak che possono verificarsi nelle nostre applicazioni .NET se scritte "male", anche nel caso di solo codice managed. Credo che ogni sviluppatore di buon livello debba annoverare, nel suo bagaglio culturale, la conoscenza di come funzionano le cose a basso livello, perché in alcuni casi bisogna implementare IDisposable (tempo fa ho scritto qualcosa in proposito qui), cosa sono boxing e unboxing, cosa succede quando scriviamo  myButton.Click += new EventHandler(myButtonClickHandler);
o qual è l'overhead di lavoro a...
				
				
			 
	
			
				
				
				
Preparato in poco tempo (un paio di weekend), passato 
oggi con 896.
Per essere contento son contento, anche se ho seri dubbi sulla reale utilità 
di un esame del genere: che senso ha valutare il candidato su quesiti che, 9 
volte su 10, si risolvono consultando la library... mah! Nozionismo puro 
e programma estremamente vasto... A me è sembrato inutilmente 
complicato, fortuna che me lo son buttato alle spalle, va'...
Speriamo che quelli per win e web siano più interessanti. Sciaoooo!
powered by IMHO 1.3
				
				
			 
	
			
				
				
				
Scrivo solo oggi perché ho avuto un weekend piuttosto 
intenso! Che dire... contentissimo! Intanto mi sento di ringraziare Gian Maria, Diego, Stefano e tutti gli altri ragazzi per la splendida organizzazione, 
per il caffé nel termos che mi ha salvato dal crollo, per i pasticcini che 
invece hanno salvato Igor e soprattutto l'albero di natale aziendale, senza il 
quale io e Janky non avremmo potuto sistemare le ultime robine sulle slide 
durante la sessione di Simone (già... perché da che mondo è mondo, le slide 
e le demo devono essere completate 30 secondi prima di parlare, altrimenti porta 
sfiga).
Mi spiace di...
				
				
			 
	
			
				
				
				Stento ancora a crederci... trattengo con fatica la gioia... il domani ha tinte più rosee... piove governo ladro!  E' uscita la primissima release di NHDomainMapper!! Non scrivo altro, anche perché non avrebbe senso: oramai avrete tutti abbandonato questa pagina per volare a quella del download! Una sola nota: ogni bug che troverete, sappiate che è colpa di Janky, ghghhg!!
				
				
			 
	
			
				
				
				Avvertenza: questo è un post autocelebrativo, Janky mi ha pagato profumatamente per scriverlo, quindi se vi farà venire il diabete prendetevela con lui. Windows Vista è quasi in RTM? Avete provato Orcas per la prima volta? Office 2007 lo usate già da un po'? Vi piace HappySign di Igor? STICA!!! Siete il nulla: sta per arrivare NHibernate Domain Mapper rel.0.1 alpha codename SUPERTANGA!! Ora, visto che un rilascio ufficiale non c'è ancora stato, purtroppo credo che difficilmente che ci sia qualcuno, oltre me e il bravo Sudano, in possesso di queste fantasmagoriche righe di codice C#. Tanto per dare un'ulteriore...
				
				
			 
	
			
				
				
				
Prendo spunto dal recente post di Corrado per 
dire che anche nelle Winforms è possibile utilizzare il databinding in senso 
"lato", ossia per impostare interazioni tra gli oggetti di una form piuttosto 
che per visualizzare informazioni provenienti da una fonte dati.
Sappiamo benissimo che .NET ogni oggetto è utilizzabile come sorgente 
dati, quindi perché non utilizzare un Control come DataSource? Create una 
winform con una CheckBox e una ComboBox, poi, nel costruttore, scrivete:
public Form1(){    InitializeComponent();        Binding b = new Binding("Enabled", checkBox1, "Checked");    this.comboBox1.DataBindings.Add(b);}
Indovinate un po' cosa accade... 
powered by IMHO 1.3
				
				
			 
	
			
				
				
				
La creazione di un oggetto di tipo Image da un file 
nasconde una piccola insidia. Consideriamo il seguente snippet di codice:
Image myImage = Image.FromFile("filename.jpg")
Ciò che accade dietro le quinte è che nel field
internal IntPtr nativeImage
viene memorizzato un handler al file filename.jpg, che rimane aperto 
finché non si richiama il metodo Dispose() di myImage. Il problema è che, 
ovviamente, il file risulta bloccato e il sistema ha una risorsa impegnata; 
inoltre, se dimentichiamo di effettuare la Dispose, questa situazione perdura 
fino a che non viene effettuato un GarbageCollecting o, al peggio, fino alla 
chiusura dell'applicazione.
Come ovviare? Personalmente, quando devo caricare un'immagine da file, faccio 
così:
Image myImage;using (Image img = Image.FromFile("filename.jpg"){    myImage = new Bitmap(img);}
Il costruttore...
				
				
			 
	
			
				
				
				Un semplice esempio di come implementare il Drag'n Drop nelle nostre Windows Forms
C.p.l.
				
				
			 
	
			
				
				
				Quando ci si deve interfacciare con un webservice che 
restituisce custom types, il tool WSDL.EXE provvede da solo a definire alcune 
classi che rispecchiano il naming dei tipi in origine e che possono essere 
direttamente utilizzate nel codice del nostro client.
Click sul titolo per leggere...
				
				
			 
	
			
				
				
				Il viewstate di ASP.NET alle volte è una gran comodità, 
che però paghiamo in termini di prestazioni ad ogni postback, dato che un bel 
campo hidden di grandezza che a volte può essere considerevole, è costretto ad 
andare avanti e indietro tra client e server.
Click sul titolo per leggere
				
				
			 
	
			
				
				
				
Quella passata è stata una settimana a dir poco 
massacrante, in cui non ho avuto un solo attimo di respiro (weekend compreso). 
Per fortuna mi sono buttato alcuni impegni alle spalle e all'una e spiccioli di 
domenica sera ho finalmente il tempo per
  installare Windows Vista Beta 2 (perché io sono tra i 
  comuni mortali che per il momento non hanno a disposizione un abbonamento 
  MSDN) 
  Bloggare un po' 
Nelle attività che ho svolto ultimamente, mi sono ritrovato nella necessità 
di invocare un Web Service sotto https senza che il server avesse a disposizione...
				
				
			 
	
			
				
				
				
Validare le vostre domain entities è sempre stato un 
problema? Implementare constraints in maniera dichiarativa è il vostro sogno? 
Benissimo... abbiamo quello che fa per voi!
Siore e siori... Validation Application Block 0.4 
Il Validation Application Block grazie agli sforzi miei e di Andrea arriva alla 
release 0.4 e, per l'occasione, migra su SourceForge. Le novità introdotte rispetto alla versione 
precedente riguardano essenzialmente architettura e naming (già, naming, 
purtroppo vi toccherà ritoccare qua e là il codice, se utilizzavate la 0.3), ed 
in particolare:
  Architettura: è stato aggiunto un supporto alle validation rules (per 
  il momento a livello embrionale e purtroppo...
				
				
			 
	
			
				
				
				
Espando un pochino il concetto espresso nel precedente post a beneficio di chi sia ignaro della questione 
Nel mio caso specifico, ho la necessità di connettermi ad un servizio remoto 
che mi restituisce un documento XML, che viene poi a sua volta interpretato per 
creare una serie di entities del mio object model. La classe di cui può 
avvalersi l'utilizzatore per ottenere le previsioni del tempo accetta nel 
costruttore un oggetto di tipo IWeatherConnector, che sarà poi fisicamente 
responsabile di inviare una richiesta Http, ottenere una risposta e restituire 
l'XML di processare:
public class WeatherProvider: IWeatherProvider{    public WeatherProvider(IWeatherConnector connector)    {        ....    }    public CurrentConditions GetCurrentConditions        (string locationId, UnitType unitType)    {        // metodo da testare, in cui utilizzo l'istanza di        // IWeatherConnector passata nel costruttore    }    public Forecast[] GetForecasts        (string locationId, UnitType unitType, int days)    {        // altro metodo da testare... stesse caratteristiche         // del precedente    }}
Ora... nel mio Unit Test voglio verificare che il...
				
				
			 
	
			
				
				
				
Stavo rispondendo a questo post di Andrea 
Moro quando alla fine mi sono reso conto di essere un po' prolisso, e allora 
ho pensato di esternare le mie elucubrazioni qui 
Volevo fare una piccola precisazione per quanto riguarda l'interfaccia 
IDisposable, perché leggo spesso che si fa molta confusione su quest'aspetto: 
richiamare il metodo Dispose *NON* serve a liberare memoria. 
A cosa serve allora? Sapete che per ogni classe posso scrivere un Finalizer, 
ad es. per liberare delle risorse unmanaged che la mia classe utilizza (si pensi 
ad un file aperto con un'istanza di FileStream). A differenza di altri linguaggi, però,...
				
				
			 
	
			
				
				
				
Premetto che non l'ho provato, provo a darci un'occhiata 
stasera, ma l'idea del bravo Nikhil Kothari mi intriga parecchio: un compilatore C# che 
invece di generare IL spara fuori del Javascript, con il vantaggio di avere a 
monte la possibilità di scrivere script lato client con un linguaggio Object 
Oriented, avere membri pubblici, privati, virtuali, interfacce, supporto 
per Intellisense e Refactoring di VS2005, ecc.ecc.ecc. Mica male!! Chissà come 
si comporta in quanto a compatibilità con i diversi browser!
BTW, trovate un piccolo articolo introduttivo, il download e anche 
un filmato a questo link!
powered by IMHO 1.3
				
				
			 
	
			
				
				
				
Dopo un minuscolo Tip pubblicato qualche giorno fa (un altro è in arrivo!!), 
oggi è uscito il mio primo articolo UGIdotNet-tiano! Riguarda la creazione di 
un'estensione per il class designer di VS2005 ed è frutto di un paio di giorni 
di ricerche e prove intensive, vista la scarsa documentazione (facciamo pure 
"quasi nulla"?) che c'è in giro sull'argomento!
Intanto ringrazio tantissimo Lorenzo "Genio 
Del Male" Barbieri, perché mi ha proposto lui di scriverlo e perché ha avuto 
tanta pazienza nella fase di editing, poi... Beh.. se avete 5 minuti di tempo, 
provate a darci un'occhiata, mi farebbe molto piacere avere qualche...
				
				
			 
	
			
				
				
				
A questo link trovate un interessante articolo introduttivo a LINQ da parte di niente-popò-di-meno-che ScottGu, e scusate se è 
poco 
powered by IMHO 1.3
				
				
			 
	
			
				
				
				
Oggi mi è arrivata una mail che mi annunciava che l'articolo sulle Crad's Actions che ho pubblicato su CodeProject è stato 
moderato e non è più una unedited reader contribution.
Questa sì che è una soddisfazione, considerando che è lì da meno di un mese e 
che molti articoli attendono il lavoro dell'editor da parecchio tempo in più! 
L'unico rammarico è che, d'ora in poi, non posso più modificarne il testo a 
piacimento, dato che ciò che invierò dovrà essere validato prima di andare 
online; peccato, perché proprio in questo weekend avrei voluto rilasciare un 
aggiornamento per correggere un paio di...
				
				
			 
	
			
				
				
				
Tra le varie best practice di .NET, una che ho sentito 
n-mila volte e ho metabolizzato senza (mea culpa) indagare ulteriormente è 
quella di ereditare ogni custom exception dalla classe ApplicationException piuttosto che direttamente da System.Exception.
Ok, riconosco l'errore di essere stato poco curioso, ma 
ieri sera, scoprendo qual è la vera realtà dei fatti, non ho potuto far a meno 
di sorriderci un po' su! Parola di Jeffrey Richter, l'intenzione 
originaria di Microsoft era tutt'altro che sbagliata: le eccezioni sollevate 
dall'applicazione dovevano ereditare tutte da System.ApplicationException, mentre quelle sollevate dal 
CLR in risposta ad errori di sistema dovevano appartenere alla gerarchia...
				
				
			 
	
			
				
				
				
Già, purtroppo non codice! Ho infatti sfruttato il ponte 
del primo maggio pubblicando un aggiornamento per il mio articolo su CodeProject e scrivendo un paio di testi nuovi. 
Che dire... non sono un grande amante di tutto ciò, lo ammetto, anche se poi 
ricevere feedback da chi ha dedicato qualche minuto a guardare il tuo codice è 
sempre un qualcosa che ti riempie d'orgoglio!
Per chi ha scaricato le Crad's Actions, ho rilasciato una nuova versione che offre 
un maggiore supporto all'espandibilità; la cosa che mi dà in assoluto più 
soddisfazione è la nuova implementazione del CollectionEditor, che ora è capace 
di...
				
				
			 
	
			
				
				
				
Sto facendo alcuni esperimenti estendendo il class 
designer di Visual Studio (se avrò successo ne parlerò in un prossimo post) e mi 
son trovato nella necessità di inserire delle parentesi graffe all'interno di 
una String.Format. Visto che alle volte la soluzione 
può non essere banale, vi segnalo questa piccola FAQ di Brad Abrams che ho 
scovato e che magari può essere utile.
Ciao 
powered by IMHO 1.3
				
				
			 
	
			
				
				
				
Nei giorni scorsi ho ricevuto un feedback da un ceco 
(nel senso che abita in Repubblica Ceca ) che aveva scovato la 
mia piccola libreria per puro caso, dicendo che secondo lui avrei dovuto 
metterla in un posto che le garantisse una maggiore visibiltà.
Io e il mio inglese maccheronico ci siam messi al lavoro e ho partorito un articoletto per CodeProject. Che dire, 
ricevere i primi rating positivi è una soddisfazione grandissima! Ora spero 
anche in qualche feedback in modo da poter evolvere il lavoro sin qui 
svolto.
powered by IMHO 1.3
				
				
			 
	
			
				
				
				
Chi sviluppa componenti con supporto al designer di 
VisualStudio, sicuramente si è trovato ad utilizzare la proprietà DesignMode per verificare se il codice sia in esecuzione 
nel contesto del designer o a runtime.
Bene, avevo un problema che mi ha portato ad indagare su come funzioni 
internamente questa proprietà. Reflector alla 
mano ho scoperto che, in un Component...
protected bool DesignMode{    get    {        ISite site1 = this.site;        if (site1 != null)            return site1.DesignMode;                return false;    }}
Ora... premesso che, se utilizziamo VisualStudio, a 
design time il field site è un'istanza di 
System.ComponentModel.Design.DesignerHost.Site e che quel 
site1.DesignMode ritorna sempre true, c'è da fare 
un'importante considerazione: durante l'esecuzione del costruttore del 
Component, DesignMode è SEMPRE false, perché il corrispondente Site non 
è...
				
				
			 
	
			
				
				
				
Sicuramente tutti voi avrete notato che, nel template 
utilizzato da VS2005 per il metodo main dei nostri progetti windows forms, 
c'è una riga che recita
Application.SetCompatibleTextRenderingDefault(false);
Di cosa si tratta? L'ho scoperto ieri sera, cercando di 
utilizzare anche in C# la classe WindowsFormsApplicationBase: è una nuova feature delle 
classi che ereditano da Control del Fx 2.0 e consiste nella capacità di 
utilizzare GDI piuttosto che GDI+ per il rendering del testo.
Come mai? Beh, GDI+ ha la peculiarità di avere API estremamente semplici da 
utilizzare, ma il buon vecchio GDI offre parecchi vantaggi, per esempio:
  Il look dell'applicazione è più consistente con le varie...
				
				
			 
	
			
				
				
				
La piccola libreria open-source che sto realizzando si è 
appena evoluta: grazie al tempo libero che ho avuto durante queste vacanze, sono 
riuscito (in ritardo rispetto a quanto avevo previsto, purtroppo) a rilasciare 
la versione 1.1 delle Crad's Actions.
Le novità rispetto alla release precedente sono parecchie: intanto un 
sensibile refactoring del codice (come?!?! così presto?!? ), che ora è sensibilmente più ordinato e 
comprensibile, poi l'aggiunta di nuove proprietà (quali shortcut keys, 
tooltip, ecc.ecc...), infine la creazione di un corposo numero di Standard 
Actions (es. Cut/Copy/Paste e parecchie altre), numero che è destinato ad 
aumentare nei prossimi giorni 
Per dimostrare il...
				
				
			 
	
			
				
				
				
Il titolo non sarà la massima espressione di linguaggio 
tecnico, però è un problema che mi sono trovato ad affrontare nel weekend 
sviluppando le mie 
Actions         
              
  
Ora, chi le ha scaricate e magari ha avuto modo di guardarne i sorgenti, sa 
che si tratta di oggetti che ereditano da Component e che vanno sistemati su una 
Windows Form. Mi sono trovato nella necessità di avere, nella mia ActionList, un 
riferimento alla Form su cui essa giace....
				
				
			 
	
			
				
				
				
Quando creiamo CustomControls, spesso 
esponiamo proprietà che ritornano collection di items. Visual Studio è 
abbastanza furbo da generare un Designer opportuno per creare le istanze degli 
oggetti contenuti a design-time, tramite l'UITypeEditor CollectionEditor.
L'abbiamo usata migliaia di volte, si fa click su "Add" 
e, detto T il tipo base di dati esposto dalla 
collection, automaticamente una nuova istanza di T viene aggiunta ad essa. 
Bene, ma se T fosse un tipo astratto? o se volessimo popolare tale 
collection anche con tipi derivati da T? come farlo a design time? 
Nulla di più semplice! Basta creare un custom UITypeEditor che derivi da CollectionEditor ed...
				
				
			 
	
			
				
				
				
Dato che mi è stato chiesto da qualcuno in mail, ho pubblicato un breve 
tutorial (in inglese, spero non troppo maccheronico ) su come utilizzare le Actions per .NET 2.0.
Per leggerlo basta un click qui!
powered by IMHO 1.3
				
				
			 
	
			
				
				
				
Chi ha lavorato in Delphi sa quanto siano comode le 
actions! Di cosa si tratta? Allora...
Una form, solitamente, permette di compiere la stessa azione tramite più 
elementi visuali; pensate ad esempio alla funzione "Grassetto" in un ipotetico editor RTF: magari 
possiamo attivarla tramite menu, oppure potremmo utilizzare una comoda toolbar, 
o ancora potremmo accedervi tramite un bel context menu. Tutti questi elementi condividono 
parecchie proprietà: innanzitutto devono tutti rispondere al click del mouse allo stesso modo, e 
questo si può già fare in .NET assegnando lo stesso event handler a tutti gli oggetti per i rispettivi eventi click. Purtoppo ciò...
				
				
			 
	
			
				
				
				I ValueTypes sono oggetti un po' particolari: sono allocati nello stack 
piuttosto che nel managed-heap e le assegnazioni, se effettuate con reference 
type, danno luogo a quel meccanismo che risponde al nome 
di boxing/unboxing. Dicevo, regola aurea: *MAI* introdurre metodi 
che cambiano lo stato interno di un value type, i risultati potrebbero essere 
"strani"
Click sul titolo per continuare a leggere!
				
				
			 
	
			
				
				
				
Scenario: abbiamo una nostra bella custom collection, 
magari che implementa IBindingList, ma non siamo perfettamente soddisfatti di 
come il FX ne gestisca il binding: vorremmo infatti scegliere a priori, ad esempio, l'ordine con cui le proprietà vengono 
visualizzate quando si effettua un data binding con una DataGridView, o vorremmo poter popolare la nostra custom 
collection di Person anche con tipi derivati da Person (normalmente 
la DataGridView se la prende parecchio se ci proviamo ).
La soluzione è implementare ITypedList e io, mesi 
fa, l'avevo fatto seguendo i dettami di questo articolo su MSDN 
Magazine. E' andata sempre bene, finché oggi, facendo alcuni test sulle...
				
				
			 
	
			
				
				
				
Una delle necessità in cui si può incorrere quando 
si sviluppano applicazioni utilizzando custom entities, consiste nel fare in 
modo che le proprietà dei nostri oggetti presentino descrizioni significative 
una volta in binding, ad esempio, ad una DataGridView.        
          
          
        
Personalmente cerco sempre di creare entities con nomi 
di proprietà significativi, ma se volessi automaticamente far apparire "Data di 
nascita" in luogo di "DataNascita" quando effettuo il binding...
				
				
			 
	
			
				
				
				
Oggi ho ricevuto un feedback a questo post     che mi ha dato da 
pensare: ultimamente mi è capitato di leggere commenti molto negativi sul modello DataSet/DataAdapter di ADO.NET, quasi che un bel Domain Model rappresenti la panacea di tutti i mali.
Il mio punto di vista, a questo proposito, è che la distinzione tra bene 
e male (o tra Black and White, passatemi questa... è per celebrare il successo del nostro Francesco ) 
non sia sempre così netta. Chi ha letto Patterns of 
Enterprise Application Architecture sa bene che è lo stesso Martin Fowler a sconsigliare il Domain Model in favore di 
altri approcci (ad...
				
				
			 
	
			
				
				
				
Una delle maggiori problematiche per chi ha avuto 
qualche esperienza con NHibernate è il fatto che questo 
O/RM non gestisce direttamente collection strongly-typed. Ammetto di 
non aver cercato moltissimo in giro per la 
rete, ma in quei 3 o 4 esempi che ho guardato, le business entities 
avevano sempre la forma
public class Master{    // ... more code ...    private IList details;    public IList Details    {        get { return details; }    }}
Questo tipo di implementazione pone alcune 
problematiche: oltre al fatto di essere weakly-typed, può funzionar bene se 
viene utilizzata in una pagina ASP.NET, grazie al databinding poco 
"interattivo", ma se proviamo a collegarla ad una windows forms perdiamo un 
sacco di funzionalità a cui eravamo abituati usando i DataSet (il refresh dei 
dati sullo schermo...
				
				
			 
	
			
				
				
				
In realtà sono molto più temibili i Sabato 18, 
soprattutto quando ti viene in mente di aggiornare il tuo sistema al Framework 
2.0, approfittando della giornata libera (fino ad oggi ci lavoravo su una 
Virtual Machine, poi l'esasperazione per la lentezza ha preso il 
sopravvento).
Ho già avuto piccoli sentori che qualcosa non andava quando ho disinstallato 
Sql Server 2000 per far posto al 2005: l'uninstall sa solo lui cosa ha 
eliminato, fatto sta che il servizio era ancora lì, le cartelle con tutti i 
programmi pure e anche le icone sul menu Start resistevano. Consiglio: mi è 
stata parecchio utile...
				
				
			 
	
			
				
				
				
Igor mi ha tolto le parole di bocca (o, per meglio dire, i caratteri 
dalla tastiera ) : anche io stavo per scrivere qualcosina a proposito 
di un weekend parecchio "object-oriented", trascorso tra C# e NUnit.
Parecchio tempo l'ho passato integrando il ValidationApplicationBlock di Andrea. Che 
dire... beh, innanzi tutto che effettivamente questa storia dei custom 
attributes, che ha visto nascere un enorme secondo post addirittura all'una di notte passata, mi sta 
prendendo fin troppo la mano!  Ho modificato un paio di cosine delle classi già 
presenti e inserito alcune nuove funzionalità, speriamo che Andrea gradisca, così 
magari ve le ritrovate in una prossima release! 
  In...
				
				
			 
	
			
				
				
				
In un post precedente   ho iniziato un discorso su come 
utilizzare le potenzialità dei custom attributes per validare le nostre entity. 
Una volta capito il meccanismo, è estrememente semplice implementare tutta una 
serie di classi che permettano le più disparate tipologie di validazioni, magari 
anche combinandole tra di loro.
Il nostro nuovo ErrorMessageAttribute
Ma se la validazione fallisce come dobbiamo comportarci? Beh, l'ideale a 
questo punto sarebbe sollevare un'eccezione, magari potendo fornire un 
messaggio d'errore specifico per il membro che non è stato correttamente 
valorizzato. Siccome ci stiamo appassionando tantissimo alla programmazione 
dichiarativa , realizziamo un bell'attributo simile a questo 
(semplicissimo) che...
				
				
			 
	
			
				
				
				
Magari per tanti di voi sarà già tutto noto, ma lo scrivo 
lo stesso per chi, come me, non ne era al corrente.
Sul sito di MSDN, e più precisamente a questo indirizzo, sono presenti diversi template da 
utilizzare per le nostre web-apps. Alcuni sono veramente carini e, 
cosa importante anche per "fini didattici", sono 
tutti realizzati sfruttando parecchie delle novità di ASP.NET 2.0, quali Master 
Pages, GridView, Themes, ecc.ecc.
Buon download 
powered by IMHO 1.3
				
				
			 
	
			
				
				
				
 Ieri sera, mentre riscrivevo alcune delle baseclass 
del mio domain model sfruttando alcune delle chicche del FX 2.0 
(leggi BindingList<T>, che mi fa risparmiare un sacco di codice), mi sono 
chiesto se non fosse possibile costruire una struttura per validare 
automaticamente le mie business entities, visto che il codice da scrivere è 
spesso ripetitivo: questa proprietà non può essere nulla, quest'altra deve 
essere maggiore di zero, e così via.
In pratica, ciò che si vuol fare è di integrare i metadati delle nostre classi decorandole 
con Attributi personalizzati che poi possiamo recuperare a 
runtime via reflection. Supponiamo, ad esempio, di voler realizzare...
				
				
			 
	
			
				
				
				Scaricando uno qualsiasi dei Visual Studio Express Edition e registrandosi, si 
ottiene gratuitamente tutta una serie di download aggiuntivi, alcune icone, 
immagini e i libri (ovviamente in formato PDF) della serie Build a 
program NOW!   
Ho 
avuto l'occasione di dare un'occhiata a questi ultimi qualche giorno fa, dopo 
che mio padre mi aveva chiesto una guida semplice per realizzare qualche piccola 
applicazione su windows. Che dire... mi hanno sorpreso, veramente un ottimo 
lavoro: coprono un'ampia fascia di argomenti, che vanno dal making-up delle 
interfacce alla validazione dell'input dell'utente, o dalla gestione dati 
tramite un RDBMS fino ai WebServices, spiegando...