.NET

Rilasciato NHibernate Linq

Dopo una lunga attesa è stato deciso che il provider Linq per NHibernate ha raggiunto una maturità tale da essere marcato con la versione 1.0 Personalmente lo usavo già con soddisfazione da qualche mese quindi devo dire che l’etichetta 1.0 per me non cambia molto. Nell’ultimo progetto l’uso di Linq e di Linq.Spefication hanno fatto veramente la differenza. Se ne è accorto pure il cliente :-) Technorati Tag: NHibernate,NHibernate.Linq,Linq

NHibernate 2.1.0CR1

Da oggi è possibile scaricare la versione 2.1.0CR1 di NHibernate. Maggiori info le trovate qui. Questa è l’ultima versione che ha come target il FX 2.0 Da notare che il team ha già spostato la versione 2.1 in un branch a parte e nel trunk è già partito il lavoro per la realizzazione della versione 3.0. Technorati Tag: NH,NHibernate

NHibernate 2.1.0 Beta2

Oggi è stata rilasciata la beta 2 della versione 2.1.0 di NHibernate. All’interno di questa release tra le varie cose c’è una fix che permette di risolvere il problema tra NHibernate, SQL Server ed piani di esecuzione (per maggiori dettagli relativi al problema si può cominciare a leggere questo post). Per chi usa query HQL il problema ancora persiste ma in quel caso una soluzione ottimale potrebbe non essere sempre possibile. Il problema è noto, gli unit-test che lo identificano ci sono quindi credo che a breve verrà fissato anche questo. Qui il download Technorati Tag:...

Notizie fresche su Linq to NHibernate

Qualche tempo fa avevo scritto qualcosa a riguardo. Stasera leggendo un po’ di blogs mi sono imbattuto su un’altro post del dev che in questo periodo sta lavorando quasi full-time al provider Linq per NHibernate. Qui trovate altre informazioni per capire a che punto è il progetto. Buona lettura… Technorati Tag: Linq to NHibernate,Linq,NHibernate

IV UgiAltNetConf (27 Giugno 2009)

Mi rifaccio ai post di Simone ed Emanuele per ricordate che il prossimo 27 Giugno si terrà a Bologna la IV UgiAltNetConf. Un evento completamente grautito a cui tutti siete invitati a partecipare. Abbiamo raccolto 18 sessioni tutte di altissimo livello e su svariate tematiche di sicuro interesse: SPRING.NET, un completo application Framework Continuos Integration Come progettare l'UX Presentation Patterns – MVVM Componentizzazione e passaggio di dati tra controller e view nelle applicazioni MVC: come...

LINQ to NHibernate

Leggendo qui sembra che ci siamo! Time for another update; it's been a while since the last one. Good progress has been made on the new HQL AST Parser port from Hibernate, and it's now in a state where it's usable, passing the vast majority of the tests within the NHibernate test suite. Of those that are failing (around 8 out of over 1600), we are currently discussing on the developers group whether we will live with these minor breaking changes, or do continued work on the parser to get everything passing. Technorati Tag: LinqToNHibernate,Linq,NHibernate

Addio NAnt. Benvenuto Rake

In questi giorni ho iniziato la migrazione degli scripts che utilizziamo per eseguire le build. Come si capisce bene dal titolo del post fino ieri il build runner era NAnt quindi gli scripts dei file xml. Da oggi ho iniziato a convertire i file in xml in scritps ruby che poi vengono eseguiti da Rake. Il motivo principale per fare questo è il passaggio da un Domain Specific Language esterno verso un Domain Specific Language interno. Un Domain Specific Language è un mini-linguaggio adatto ad un problema specifico, in questo caso serve per descrivere i task necessari...

Macchina a stati usando una fluent interface

Qualche giorno fa Antonio ha postato un interessante esempio di come sia possibile descrivere una macchina a stati usando C# ed un’approccio FluentInterface. L’esempio mi sembrava interessa ho provato riscrivere la mia versione dello stesso codice.  I commenti del post non mi sembravano il posto migliore (avrei perso la formattazione) quindi ho deciso di postare qui la mia soluzione: Innanzi tutto ho modificato la descrizione della macchina così return StateMachine.describedAs .hasState( ...

Sync Framework con IronRuby

In questo ultimo periodo abbiamo messo in produzione una serie di applicazioni occasionalmente connesse che sfruttano il Microsoft Sync Framework per sincronizzare i propri storage locali con lo storage centralizzato. Prima di tutto è bene dire che il Microsoft Sync Framework ha un runtime che premette la sincronizzazione universale agnostica da tipi di dato e protolli. la possibilità di creare e consumare feeds che sono "FeedSync-compliant" lo sviluppo rapido di applicazioni che sincronizzano dati archiviati su file system NTFS, drivers removibili, Microsoft SQL Server ...

UGI Alt.net conference III

Sabato 24 Gennaio 2009 si terrà a Milano la terza conferenza UGI Alt.net: si tratta di una conferenza gratuita di un giorno dedicata alla filosofia ALT.NET. Seguire la filosofia ALT.NET equivale a seguire i propri gusti sul design delle applicazioni e usare la piattaforma .NET per supportare le proprie idee invece che doverle plasmare per adattarle al framework. Sebbene nessuna di queste cose sia un requisito per “essere ALT.NET” la community abbraccia metodologie agili come Scrum, XP. Usa strumenti open source e segue pratiche come Test Driven Development/Design, Behavior Driven Development/Design, Domain Driven Development/Design. ...

Lanciare MbUnit usando NAnt e Gallio

Gallio ha un buon supporto per NAnt! L'unica pecca è la documentazione a riguardo che attualmente è un po' scarna. Di seguito quindi posto le istruzioni per portare a buon fine l'operazione senza grossi sforzi. Prima di tutto bisogna caricare i Tasks di Gallio in NAnt inserendo la riga nel file di progetto <loadtasks assembly=".\tools\Gallio\Gallio.NAntTasks.dll" /> Poi grazie a questo frammento di xml possiamo lanciare gli unit tests contenuti in un assembly chiamato Data.Fixture.dll <target name="test" depends="build"> <gallio result-property="exitCode" failonerror="false" > <runner-extension value="TeamCityExtension,Gallio.TeamCityIntegration" /> ...

Un bel ricordo del TechEd EMEA 2007

La sessione di chiusura dello scorso TechEd EMEA 2007 è stata sicuramete una delle più belle sessioni a cui abbia mai assistito. Il titolo era "The Irresistible Forces Meet the Movable Objects". Se siete curiosi di capire come sarà il futuro per noi "software guys" non perdetevela! Qui il video.

UgiAlt.net (mini)conference - 23 Febbraio 2008

Come scritto da Ema qualche tempo fa, come ugialt.net stiamo organizzando una giornata di conferenza. Dopo il sondaggio fatto sulla lista è emerso che il giorno preferito è 23 Febbraio 2008. La conferenza si svolgerà presso la sede di ABSistemi che gentilmente ci supporta in questa iniziativa. Abbiamo già alcune proposte che a breve metteremo ai voti per capire quali siano più interessanti e quindi meritano essere i primi temi di discussione. La partecipazione è completamente gratuita! Il formato delle sessioni sarà di tipo open space, quindi chi propone gli argomenti non ha il ruolo dello "speaker classico" ma ha...

Callbacks hook come RubyOnRails in C#

In questi giorni di calma apparente mi sto guardando un po' di RubyOnRails. In questo framework ho trovato cose interessanti. Una tra le tante è la possibilità di definire nel Model dei metodi in modo tale che vengano invocati prima e dopo una determinata azione. Es. è possibile indicare un metodo come azione before_save in modo che venga eseguito prima del metodo save.  Sono presenti parecchie possibilità tra cui: after_create after_destroy after_save after_update after_validation after_validation_on_create after_validation_on_update before_create before_destroy before_save before_update before_validation before_validation_on_create before_validation_on_update Maggiori info...

Reflection & MbUnit

Oggi, facendo alcune prove suggerite da questo post di Antonio, ho notato che nell'assembly MbUnit.Framework.2.0 è disponibile la classe Reflector che serve per controllare lo stato di un oggetto tramite reflection in maniera molto semplice. Per esempio: [Test]public void Ctor_Always_SetFieldName(){    Foo foo = new Foo("claudio");    Assert.AreEqual("claudio", Reflector.GetField(foo, "_name"));} serve per controllare che il costruttore imposti correttamente il valore della variabile di classe che si chiama _name. Ovvero che Foo sia così: public class Foo{    private readonly string _name;     public Foo(string name)    {        _name = name;    }} Anche se generalmente un test non controlla lo stato interno di un'oggetto...

Chat UGIALT.NET: 10 Dicembre 2007 ore 21.00

Dopo gli esperimenti realizzati l'inverno scorso e le positive discussioni che hanno seguito l'open space di quest'anno all'agileday  abbiamo deciso di dare il via ad una serie di chat "tecnologiche". Dal sondaggio effettuato sulla lista risulta che la data preferita è 10 Dicembre. Quindi è confermato che ci troviamo online su GTalk alle 21.00 . I temi che tratteremo saranno: cos'è ALT.NET quali strumenti e quali metodologie usiamo progetti del gruppo? (incontri veri a gennaio e progetto open source) L'iniziativa è aperta a tutti, e tutti potranno parlare ed esprimere opinioni, consigli, esperienze,...

Roy Osherove: cantante al TechEd 2007

Sicuramente come cantante non avrà mai successo ma come speaker bisogna riconoscere che ci sa proprio fare! Technorati tags: Tech Ed

Tech-ed: sessioni del 8 novembre

Securing ASP.NET and Windows Communication Foundation (WCF) Application with Windows Cardspace Da qualche tempo a questa parte non mi piace molto vedere questo tipo di sessioni che parlano di progetti che avermo a disposizione solo tra qualche mese. Si perchè quello che Vittorio ci ha fatto vedere sono funzionalità che al momento non ci sono ancora in CardSpace. Non conoso CardSpace quindi per me è stato il primo contatto, le premesse sono interessanti sembra che mettere in piedi un sistema di autenticazione sicuro con la tecnologia che avremo in futuro possa essere un ottimo strumento. Va be vedremo in futuro.   Manual...

LINQ anche per lo strato di presentazione

Quello che emerge da quanto visto al TechEd è che LINQ non è una feature di C# 3.0 che serve solo per lo strato di accesso ai dati.Di seguito un piccolo esempio in cui LINQ semplifica di parecchio il nostro codice anche nello strato di presentazione. Prendiamo per esempio un dominio in cui ogni User appartiene ad un Group:0:          public class User1:          {2:             public int ID {get;set; }3:             public string Name {get;set; }4:             public string Telephone { get; set; }5:             public Group Group { get; set; }6:          }7:          public class Group8:          {9:             public string Name { get; set; }10:         } quindi con un mettodo LoadUsers() abbiamo una lista...

Tech-ed: che musica...

Oggi è stata una gran bella giornata, con così tante sessioni interessanti che non ho trovato il tempo di bloggare un po' di commenti a riguardo. La cosa più interessante è stata poter seguire nello stesso giorno 2 sessioni di Roy Osherove che come forse già saprete ha il vizio di terminare le sue sessioni con un performance musicale. Oggi è stato il turno di "Che sarà sarà"! ps. scusate per la pessima foto :(

Metropolis: Interchangeability of Operations

Prima sessione dopo la key note: quasi 70 slide! Concetti , rilessioni e tante buone idee per realizzare applicazioni. Che siano ServiceOrientedApplication o NO non fa molta differenza: nella sessione Pat Helland ha fatto un ampio confronto tra i concetti che governano il "mondo reale" e come il "mondo software" rappresenta questi concetti. Sessione non entusiasmante ma nel complesso interessante.   Technorati tags: Tech Ed, Architettura

User stories applied [cap.2]

Per le storie si può usare l'acronimo INVEST per definirne 6 attibuti: Indipendent: idealmente una storia dovrebbe essere indiependente dalle altre, così da poter decidere liberamente in quale ordine implementarle. Negotiable: i dettagli di una storia sono negoziati tra il "team del cliente" e gli sviluppatori Value to users or customers: le storie dovrebbero essere scritte in modo da rappresentare una chiaro valore per il commitente o per gli utenti. Il modo migliore per raggiugere questo risultato è far scrivere le storie al "team del cliente" Estimable: deve essere sempre possibile stimare lo sforzo necessario per realizzare...

Aggiornata la documentazione di mbUnit

Nel weekend è stato aggiornato il sito che contiene la documentazione di mbUnit: http://docs.mbunit.com Technorati tags: mbunit

MVC: Microsoft & Castle

Come forse saprete alla ATL.NET conference ScottGu ha mostrato una preview dell'implementazione del pattern MVC in ASP.NET a cui sta lavorando Microsoft. Per chi conosce Castle sa già che oggi è già possibile sviluppare applicazioni web seguendo MVC utilizzando Monorail e tutti gli altri tools (Window Container, MicroKernel e ActiveRecord). Interessante notare che il team di Castle ha messo subito home page un commento riguardo a cosa pensa di questo nuovo "tool" targato Microsoft. Technorati tags: ASP.NET, MVC, Castle

Refactorings quick reference guide

Quando si vuole procedere con un po' di miglioramento del proprio codice ci sono 2 libri molto interessanti che ci possono guidare in questa operazione: Martin Fowler's "Refactoring: Improving the Design of Existing Code" Joshua Kerievsky's "Refactoring to Patterns". C'è anche qualcuno che si è preso la briga di fare una piccola guida per navigare più agevolmente il contenuto di questi 2 manuali.Il documento .pdf lo potete scaricare da qui. Penso che sulla mia scrivania questo foglio possa trovare il suo giusto spazio, magari soppiantando l'oramai consunto foglio con la lista degli shortcut di Resharper ! Technorati tags: Refactor, Design Pattern

TechEd 2007: I'm coming!

E' ufficiale. Il bonifico è partito, quindi dal 5 al 9 novembre ci si vede in quel di Barcellona.     Technorati tags: Tech Ed 2007, Barcelona

Esplorando il Behaviour Driven Development

Da qualche tempo ho notato in rete un certo interesse verso il Behaviour Driven Development (abbreviato in BDD). Sul sito viene data questa definizione : Il Behaviour-Driven Development (BDD) è una evolozione dei concetti alla base del TestDrivenDevelopment e del AcceptanceTestDrivenPlanning. Ovviamente esistono diverse implementazione (vedi tools) a seconda della piattaforma su cui si sviluppa. Per chi usa il framework .NET consiglio di dare un'occhiata a questi due progetti: specter che usa Boo come linguaggio per creare i test. Sul sito è presente anche un buon video su come usarlo. Behave# che usa C#, un esempio lo trovate su wiki del progetto. Altri...

Ruby on Rails vs .NET

Continua la serie dei video Ruby on Rails vs.  Stavolta tocca a .NET    Questo il link al video su youtube.com Technorati tags: .NET, Ruby on Rails, RoR

Pattern MVP: usare una classe base per ottimizzare il test dei Presenter

In questo ultimo periodo ho usato molto il pattern ModelViewPresenter. Per scrivere le mie triadi MVP ho utilizzato la tecnica del presenter first con ottimi risultati. All'interno dei miei unit-test ho fatto ampio uso di Mock Objects ed ho notato una certa ripetitività nel codice prodotto, soprattutto nei metodi di Setup e di TearDown. Con una soluzione simili a quella usata per il refactoring del presenter, ho usato i generics ed una classe base per evitarmi inutili ripetizioni. Vediamo un esempio concreto. Di seguito un presenter con la sua View ed il suo Model     public interface IMyView     {       void ShowLoggedUser(string s);    }   public interface IMyModel   ...

Pattern MVP: usare una classe base per ottimizzare i Presenter

In questo periodo ho scritto molto codice che usa il pattern MVP ed ho notato che il costruttore di un presenter fa bene o male fa quattro operazioni fondamentali: riceve riferimento ad un'instanza della view  controlla che la view non sia null riceve riferimento ad un'instanza del model controlla che il model non sia null Con una sintassi simile a questa: public class MyPresenter    {       private readonly IMyModel _model;       private readonly IMyView _view;       public MyPresenter(IMyView view,IMyModel model)        {           if (view ==null)               throw new ArgumentNullException("view");           if (model ==null)               throw new ArgumentNullException("model");            _model = model;            _view = view;        }    }/p>   In un progetto mediamente complesso capita di...

I Silverlight tools funzionano solo con Visual Studio Orcas Beta1

In questi giorni mi sono scaricato l'ultima CTP di Visual Studio 2008 codename "Orcas". Tra le altre cose volevo provare a sviluppare un'applicazione con Silverlight. Per questo sulla macchina virtuale con la CTP di Orcas ho installato l'add-on Microsoft Silverlight Tools Alpha for Visual Studio codename "Orcas" Beta 1 con la speranza che il toolkit funzionasse non solo con la Beta 1 ma anche con le versioni successive. Purtroppo però non è così come confermato dal Visual Studio Product Team qui: "The silverlight tools only work with Beta1. We will be doing a refresh for beta2 shortly after it is available." Non...

Unit testing non è sicurmanente la panacea di tutti i mali!

Oddio cosa ho scritto. Ma in fondo è solo la pura verità. Stuzzicato dal post di Raffaele non ho potuto trattenermi dal postare anch'io e spendere 2 parole sull'argomento. Al mio commento Raffaele ha risposto : "Unit Testing non può essere una base per validare un software. È solo uno dei tanti sistemi che può rivelarsi più o meno utile a seconda dei casi" Io qui ribatto con: Sicuramente usare solo unit test non basta, ma se parliamo di test ce ne sono diversi tipi e riuscire ad automatizzarli invece che affidarsi ad un tester ha dei vantaggi oggettivi. Certamente non sempre è una attività...

Devo testare tutti i metodi setter e getter ?

Ieri sera mi sono imbattuto in un post che parlava di Unit Test in cui veniva data risposta alla domanda: "Should I test all getters & setters?" La risposta dell'autore del post era no. Ripensandoci mi sono chiesto perchè io che scrivo molti Unit Test non mi sono mai preoccupato molto di questo fatto. Alle fine ho realizzato che se mi pongo questo problema significa che prima scrivo il codice e poi scrivo il test. Se invece seguo un approccio TDD procedo in questo modo: scrivo un test per il getter della propietà che sto testando creo la proprietà vera e propria in sola lettura e mi assicuro che il...

Mock framework in PEX

Il nuovo framework di Unit Test che potrebbe vedere la luce insieme ad Orcas, la prossima versione di Visual Studio, dovrebbe contenere anche una funzionalità di mock objects. La notizia viene da questo post in cui è presente un piccolo esempio di cosa potremmo fare con PEX per usare oggetti "mokkati". Come per altri framwork sarà possibile creare mock objects di interfaccie e metodi virtual di classi non sealed

Koders Visual Studio Plug-in

Spesso la miglior documentazione per una classe o un metodo sono un esempio pratico di utilizzo concreto della stessa. Per cercare esempi di codice oggi possiamo usare molti motori di ricerca specializzati in questo compito. Per i più pigri segnalo questo plug-in per VisualStudio (sia 2003 che 2005) che permette di effettuare le ricerche nel database di Koders.com e di visulizzare i risultati rimanendo all'interno dell'ambiente di sviluppo.

Rilasciata nuova versione di mbUnit

In attesa di vedere cosa farà PEX continuo preferire a mbUnit a NUnit Maggiori dettagli li trovate qui. Grazie a ema per la segnalazione.

MVP: Comunicazione tra Presenter e View

In questo periodo sto dedicando un po' di tempo all'approfondimento del pattern MVP e delle sue sfumature. Spesso quando devo scrivere il presenter mi chiedo in che modo questo debba dialogare con una view: ovvero se tramite metodi pubblici sul presenter chiamati dalla view oppure eventi sulla view sottoscritti dal presenter. Gli autori di questo articolo a cui sono giunto grazie a questo post di Antonio suggerisco questo approccio: Communication with the presenter is made possible by the use of an event subsystem to loosely couple the model and view to the presenter. The most common case is for the view to fire events...

Novita Microsoft riguardo lo Unit test (PEX)

Da questo blog una segnalazione molto interessante riguardo a quello che in Microsoft Research stanno sperimentando relativamente al scittura di codice usando TestDrivenDevelopment. Il progetto si chiama PEX ed è disponibile anche uno screencast che ne dimostra l'utilizzo. Staremo a vedere se sarà un degno successore di mbUnit...

Considerazioni sul codice per unit test

Di seguito alcune considerazioni personali sul codice per scrivere unit test Il codice dei test non è da considerarsi codice di serie B.Va scritto, organizzato e rivisto (refactoring) con la stessa cura con cui sviluppiamo e manteniamo il codice della nostra applicazione.Quindi risulterà spesso necessario introdurre metodi o oggetti di utilità per rimuovere inutili duplicazione di codice.   In generale scrivo test per : verificare le condizioni più comuni verificare i casi limite.Per esempio se sto facendo un metodo matematico passerò parametri come 0, 1 , un numero negativo ed un numero positivo molto grande verificare le condizioni di errore attese decorando con l'apposito attributo i metodi di test che si...

Alcuni numeri su MySpaces

Che myspace sia un successo mondiale non è una novità ma i suoi numeri fanno veramente girare la testa! Su dotnetrocks trovate un'intervista a Scott Guthrie che rende pubblici alcuni dati riguardanti myspace 2,5 bilioni di pagine visitate al giorno45 milioni di connessioni simultanee Beh non servono commenti...

Calendario pop-up semplice ed intuivo

Mi segno questo ottimo controllo ASP.NET che permette di creare in pochi secondi un gradevole controllo pop-up calendarLo trovate su gotdonet  a questo indirizzo

ObjectDataSource e Data Source Controls

Segnalo una serie di post sul controllo ObjectDataSourcePart 1 - The basics - http://www.manuelabadia.com/blog/PermaLink,guid,c72852ae-1fdd-4934-a715-f565ceaf21cc.aspx Part 2 -  Paging, Sorting, Parameters and Events - http://www.manuelabadia.com/blog/PermaLink,guid,f002752d-1258-475d-9ec0-eee3bd98d0a4.aspxPart 3 - Optimistic Concurrency, parameter merging, caching and design time attributes - http://www.manuelabadia.com/blog/PermaLink,guid,eaa3eed8-f997-43c4-8c30-78c2f72d0c86.aspx Part 4 - Limitations, problems and possible solutions - http://www.manuelabadia.com/blog/PermaLink,guid,32e83915-a503-403e-97c7-e20dcf2e0b7e.aspx ed altri post più generici che riguardano i Data Source Controls Part 1 - http://www.manuelabadia.com/blog/PermaLink,guid,678ed6d8-dce8-40d7-9117-0ffd016fe886.aspx Part 2 - http://www.manuelabadia.com/blog/PermaLink,guid,eba2bb6b-7006-41ae-a035-532021eb5f42.aspx Part 3 - http://www.manuelabadia.com/blog/PermaLink,guid,e4f162b4-2adb-46d7-9d31-be32ff9b1347.aspx Part 4 - http://www.manuelabadia.com/blog/PermaLink,guid,45f5c9da-8a03-423f-b5b6-5882c4bd67e5.aspx powered by IMHO 1.3

XPath: tool e risorse

Segnalo un tool semplice ed intutivo che va bene per provare al volo le query XPath su file *.xml e una guida completa per chi come me non si ricorda mai la sintassi da usare. powered by IMHO 1.3  

NHibernate... ma quanto mi costi

Qui si possono trovare alcuni dati relativi al progetto NHibernate.Che dire davvero impressionanti. powered by IMHO 1.3

meno codice più test con mbUnit

Da alcuni giorni ho cambiato framework per il test passando da NUnit a mbUnit.La migrazione iniziale è stata indolore visto che il test scritti con NUnit sono completamente compatibili con mbUnit. C'è da dire che mbUnit ha molte funzionalità veramente interessanti e devo ancora provarle tutte come si deve ma intanto un piccolo esempio su come ridure il codice necessario per eseguire lo stesso UnitTest con parametri differenti.     [TestFixture]    public class SecurityServiceFixture     {        SecurityService ss = null;        [SetUp]        public void Init()        {            ss = new SecurityService();        }        [RowTest]        [Row("sara", "sara")]        [Row("admin", "xxx", ExpectedException = typeof(SecurityServiceException))]        public void Login(string username, string password)        {            Utente user = ss.Login(username, password);            Assert.IsNotNull(user);        }    }In questo esempio mbUnit eseguirà il metodo Login 3 volte passando i parametri definiti negli attributi.Nel 3 caso mi aspetto che il metodo Login sollevi un'eccezione del tipo SecurityServiceException. powered by IMHO 1.3

NHibernate e Nullable Types

Ieri ho dovuto affrontare il problema dei campi NULL ed NHibernate.La soluzione che sto implementando gira sul Framework 2.0 quindi il mio obbiettivo era quello di utilizzare se possibile i Nullable TypesC'è da dire che le soluzioni attualmente disponibili sono diverse. La NHibernateContrib ovverro una serie di librerie a corredo del progetto NHibernate che tra le altre cose comprende un libreria che permette di gestire i campi NULL La soluzione proposta da Benjamin Day Oppure la versione 2 della libreria NHibernate.Nullables Personalmente ho scelto è la versione 2 della libreria NHibernate.Nullables perchè mi permette di usare i Nullable Types del Framework 2.0 senza dover aggiungere dipendenze...

Agile Development Checklist

In questo articolo si può trovare una interessante lista di attività da svolgere per "essere agili".Leggendo l'elenco mi accorgo purtroppo che la mia metodologia di sviluppo è ancora un po' lontana dall'essere "100% agile" anche se la volontà è quella di avvicinarsi il più possibile. Posso confermare che i primi due punti sono 2 pratiche che aumentano moltissimo la qualità e l'affidabilità del codice prodotto e che dovrebbero sempre utilizzate. I punti 3 e 4 sono sicuramente il prossimo obbiettivo non appena avrò un po' di tempo per metterli in pratica. Per il punto 5 penso che non sia possibile nel 2006 lavorare ad...

Introduzione al Test Driven Development con VB.NET e NUnit

Su Computer Programming di Febbraio 2006 trovate un'articolo scritto a 4 mani con Emanuele.Si parla di Test Driven Development. Se vi capita di leggerlo fateci sapere...

ClickOnce e numero versione

Oggi ho usato per la prima volta ClickOnce e mi sono subito scontrato con una sottigliezza nell'utilizzo delle versioni.Erroneamente pensavo che ClickOnce modificasse il valore della proprietà Application.ProductVersion quando si pubblica un'applicazione indicando il numero di versione.   Cercando maggiori dettagli in rete ho scoperto che mi sbagliavo perchè l'engine di ClickOnce valorizza la proprietàSystem.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion per mantenere la versione e quindi se l'applicazione è distribuita via ClickOnce è più corretto indicare questo valore come numero di versione.   Di seguito un esempio di come controllarne il valore a runtime:   private void helpToolStripButton_Click(object sender, EventArgs e)        {            String msg = "Help not available at the moment";            if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)                msg += string.Format("\nApplication Version {0}", System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion);            MessageBox.Show(msg, "Help", MessageBoxButtons.OK, MessageBoxIcon.Information);        }  Da non dimenticare di controllare la proprietà System.Deployment.Application.ApplicationDeployment.IsNetworkDeployedaltrimenti vi beccate subito una bella eccezione!

Pattern per eseguire unit testing

Leggendo il blog di Martin Fowler ho scoperto questo sito in cui si trovano raccolti molti pattern per la creazione di test automatici. Penso che tutti una volta capito come funziona lo unit test si siano imbattuti sul come scrivere i test.Qui c'è parecchio materiale per l'approfondimento della materia. Un'altra interessante lettura dal taglio molto più pratico invece la trovate qui updated:aggiornato l'url del sito

Create tabelle con NHibernate

Provando un po' NHibernate ho notato una classe molto utile ovvero SchemaExport.csQuesta contiene dei metodi per generare (ma anche "droppare") al volo le tabelle all'interno del database. Nella classe BloggerFixture.cs del progetto NHibernate.Examples viene usata in questo modo public void ExportTables(){    Configuration cfg = new Configuration();    cfg.AddClass(typeof(Blog));    cfg.AddClass(typeof(BlogItem));    new SchemaExport (cfg).Create(true,true);}In questo caso genera al volo prendendo le info nei relativi file di mapping.Da usare con cautela ma in alcuni casi può tornare utile.