Crad's .NET Blog

L'UGIblog di Marco De Sanctis
posts - 190, comments - 457, trackbacks - 70

.Net 2.0

Una raccolda di post sul nuovo framework di casa Microsoft
Costanti pubbliche? AHIAHIAHI

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...

posted @ giovedì 31 gennaio 2008 16:15 | Feedback (6) | Filed Under [ .Net 2.0 Architettura .Net 3.0 .Net 3.5 ]

Multithreading su Aspitalia.com

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

posted @ martedì 16 ottobre 2007 11:04 | Feedback (4) | Filed Under [ .Net 2.0 ASP.NET 2.0 ]

BlogManager cambia nome e diviene open source

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

posted @ lunedì 8 ottobre 2007 12:05 | Feedback (2) | Filed Under [ .Net 2.0 ]

Volete organizzare tutti i Technorati Tags in pochi minuti?

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...

posted @ mercoledì 26 settembre 2007 02:12 | Feedback (4) | Filed Under [ .Net 2.0 Misc Windows Forms ]

XML-RPC e .NET

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...

posted @ martedì 11 settembre 2007 16:36 | Feedback (0) | Filed Under [ .Net 2.0 ]

Forse un problemino in OracleClient?

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...

posted @ mercoledì 21 marzo 2007 17:40 | Feedback (0) | Filed Under [ .Net 2.0 ]

[70-526] Lo preparo a tempo di record

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!!

posted @ sabato 13 gennaio 2007 18:53 | Feedback (3) | Filed Under [ .Net 2.0 ]

Memory Leak in .NET

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...

posted @ domenica 7 gennaio 2007 13:32 | Feedback (1) | Filed Under [ .Net 2.0 ]

Passato il 70 - 536

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

posted @ lunedì 18 dicembre 2006 13:05 | Feedback (2) | Filed Under [ .Net 2.0 Misc ]

La mia sull'evento di DotNetMarche

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...

posted @ lunedì 18 dicembre 2006 13:01 | Feedback (1) | Filed Under [ .Net 2.0 NHibernate Misc ]

NHDomainMapper (Supertanga edition) is out!!!

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!!

posted @ domenica 22 ottobre 2006 23:53 | Feedback (0) | Filed Under [ .Net 2.0 NHibernate ]

Cosa sarebbe il mondo senza NHDomainMapper?

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...

posted @ giovedì 5 ottobre 2006 01:29 | Feedback (6) | Filed Under [ .Net 2.0 NHibernate Visual Studio Windows Forms ]

A proposito del DataBinding nelle WinForms

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

posted @ venerdì 1 settembre 2006 12:20 | Feedback (5) | Filed Under [ .Net 2.0 Windows Forms ]

Caricamento di un oggetto Image da file

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...

posted @ mercoledì 9 agosto 2006 14:25 | Feedback (2) | Filed Under [ .Net 2.0 Windows Forms ]

A scuola di Drag'n Drop

Un semplice esempio di come implementare il Drag'n Drop nelle nostre Windows Forms C.p.l.

posted @ sabato 5 agosto 2006 15:09 | Feedback (2) | Filed Under [ .Net 2.0 Windows Forms ]

BindingWrapper per classi che espongono solo fields pubblici

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...

posted @ lunedì 3 luglio 2006 14:38 | Feedback (0) | Filed Under [ .Net 2.0 ]

Persistere il ViewState sul database (o dove ci pare)

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

posted @ martedì 27 giugno 2006 01:27 | Feedback (7) | Filed Under [ .Net 2.0 ASP.NET 2.0 ]

WebServices su HTTPS

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...

posted @ lunedì 12 giugno 2006 02:26 | Feedback (0) | Filed Under [ .Net 2.0 ASP.NET 2.0 ]

Validation Application Block 0.4 Released

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...

posted @ mercoledì 7 giugno 2006 15:59 | Feedback (0) | Filed Under [ .Net 2.0 Visual Studio ]

Ancora sui Mock objects

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...

posted @ lunedì 5 giugno 2006 15:58 | Feedback (10) | Filed Under [ .Net 2.0 Misc ]

Dispose serve a liberare memoria?

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ò,...

posted @ venerdì 26 maggio 2006 22:06 | Feedback (4) | Filed Under [ .Net 2.0 ]

Stanchi di Javascript? Provate Script#

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

posted @ martedì 23 maggio 2006 15:54 | Feedback (1) | Filed Under [ .Net 2.0 ASP.NET 2.0 ]

WOWOWO!! Il mio primo articolo!!

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...

posted @ lunedì 22 maggio 2006 11:28 | Feedback (3) | Filed Under [ .Net 2.0 Visual Studio ]

ScottGu, LINQ e ASP.NET

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

posted @ lunedì 15 maggio 2006 15:51 | Feedback (0) | Filed Under [ .Net 2.0 ASP.NET 2.0 Visual Studio ]

Wow, mi hanno moderato l'articolone su CodeProject!

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...

posted @ venerdì 12 maggio 2006 01:56 | Feedback (1) | Filed Under [ .Net 2.0 Misc Windows Forms ]

La strana storia di ApplicationException

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...

posted @ mercoledì 3 maggio 2006 02:33 | Feedback (1) | Filed Under [ .Net 2.0 ]

Weekend trascorso scrivendo (+ pensieri sparsi)

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...

posted @ martedì 2 maggio 2006 10:54 | Feedback (3) | Filed Under [ .Net 2.0 Off topic Libri ]

Come metto la graffa su String.Format ?

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

posted @ sabato 29 aprile 2006 10:51 | Feedback (0) | Filed Under [ .Net 2.0 ]

E le Actions se ne vanno su CodeProject

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

posted @ lunedì 24 aprile 2006 10:11 | Feedback (1) | Filed Under [ .Net 2.0 Visual Studio Windows Forms ]

Attenti alla proprietà DesignMode

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 è...

posted @ domenica 23 aprile 2006 11:48 | Feedback (0) | Filed Under [ .Net 2.0 Visual Studio Windows Forms ]

SetCompatibleTextRenderingDefault: cusa l'è?

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...

posted @ mercoledì 19 aprile 2006 14:19 | Feedback (1) | Filed Under [ .Net 2.0 Visual Studio Windows Forms ]

Rilasciata la versione 1.1 delle Crad's Actions

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...

posted @ martedì 18 aprile 2006 02:02 | Feedback (0) | Filed Under [ .Net 2.0 Visual Studio Windows Forms ]

Come far sapere ad un Component chi lo ospita?

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....

posted @ lunedì 10 aprile 2006 00:54 | Feedback (2) | Filed Under [ .Net 2.0 Visual Studio Windows Forms ]

Creare un custom CollectionEditor

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...

posted @ venerdì 7 aprile 2006 00:40 | Feedback (0) | Filed Under [ .Net 2.0 Visual Studio ]

Ancora sulle actions: come utilizzarle?

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

posted @ giovedì 6 aprile 2006 16:54 | Feedback (0) | Filed Under [ .Net 2.0 Visual Studio Windows Forms ]

Et voilà! Le actions di Delphi su .NET 2.0!

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ò...

posted @ mercoledì 5 aprile 2006 02:32 | Feedback (5) | Filed Under [ .Net 2.0 Visual Studio Crad's Actions Windows Forms ]

Regola aurea per chi usa Value Types

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!

posted @ sabato 1 aprile 2006 01:23 | Feedback (2) | Filed Under [ .Net 2.0 ]

Collection Master/Detail con ITypedList

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...

posted @ martedì 28 marzo 2006 15:32 | Feedback (0) | Filed Under [ .Net 2.0 ]

Custom Description per le proprietà delle nostre entitity

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...

posted @ domenica 26 marzo 2006 19:15 | Feedback (3) | Filed Under [ .Net 2.0 ]

DataSet o Domain Model?

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...

posted @ giovedì 23 marzo 2006 02:02 | Feedback (9) | Filed Under [ .Net 2.0 Architettura ]

NHibernate e le collection type-safe

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...

posted @ mercoledì 22 marzo 2006 01:22 | Feedback (9) | Filed Under [ .Net 2.0 NHibernate ]

Poi parlano male dei venerdi 17...

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...

posted @ sabato 18 marzo 2006 16:13 | Feedback (2) | Filed Under [ .Net 2.0 Off topic ]

Il mio weekend

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...

posted @ lunedì 13 marzo 2006 01:27 | Feedback (3) | Filed Under [ .Net 2.0 Off topic ]

Ancora su custom attributes e validazione

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...

posted @ domenica 12 marzo 2006 02:23 | Feedback (0) | Filed Under [ .Net 2.0 ]

Design Templates gratuiti da Microsoft

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

posted @ martedì 7 marzo 2006 22:05 | Feedback (0) | Filed Under [ .Net 2.0 ASP.NET 2.0 ]

Un custom attribute per la validazione

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...

posted @ lunedì 6 marzo 2006 22:34 | Feedback (4) | Filed Under [ .Net 2.0 ]

Build a program now!

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...

posted @ lunedì 6 marzo 2006 15:58 | Feedback (0) | Filed Under [ .Net 2.0 Libri ]

Powered by:
Powered By Subtext Powered By ASP.NET