May 2006 Blog Posts

Code Snippets a go go...

Utilizzando i semplici code snippet generici di cui scrivevo qualche giorno fa, mi sono chiesto quanto, o meglio "fin dove", potessero essere utili. Da allergico cronico alla ripetitività la tentazione era forte ed allora settimana scorsa ho provato a buttare giù altri 3 "strani" snippet relativi ai layer di un'applicazione: uno snippet che scrive semplicemente i metodi base di CRUD nell'interfaccia di un DataAccessLayer (ok, son 5 righe, ma son sempre le stesse!!!!) il secondo che scrive i relativi metodi base nella classe dello strato di business (sempre 5 metodi, ma già con qualche riga in più!) l'ultimo scrive l'intera implementazione di un DAL basato...

DALFactory

Mi sembra molto carina la possibilità di utilizzare i Generics con la factory dei DAL. Invece di avere GetCustomerDAL(), GetOrderDAL() ecc.. si può utilizzare (e soprattutto scrivere) una sola funzione più o meno come la seguente: public static T GetDAL<T>(string entityName){      string dalProviderName = "NH"; //Get from config...      System.Reflection.Assembly dalAssembly = System.Reflection.Assembly.GetExecutingAssembly(); //The assembly that contains specific DAL implementations      return (T)dalAssembly.CreateInstance(string.Format("MyFullNamespace.DAL.{0}.{1}DAL", dalProviderName, entityName));} da utilizzare più o meno così:       DAL.ICustomerDAL dal = DAL.DALFactory.GetDAL<DAL.ICustomerDAL>("Customer"); E' sicuramente da mettere un po' a posto ma il punto di partenza mi sembra carino...

Code Snippets

E' probabile che ci sia in giro qualcosa di gran lunga migliore, ma dal momento che ultimamente non ne posso più di scrivere le stesse cose mi sono creato qualche banalissimo snippet per C# con le operazioni più comuni che non ho trovato negli snippet esistenti: Creazione delle classi relative allo Special Case (Unknow e Missing) Creazione della collezione tipizzata su base Collection<> Scrittura proprietà string con inizializzazione a String.Empty Scrittura proprietà DateTime con inizializzazione a DateTime.MinValue (de gustibus...) Scrittura proprietà Guid con inizializzazione a Guid.Empty Scrittura proprietà generica ma su più righe rispetto allo snippet di C# (per la lazy...

Samples II, sempre sicuri?

Che il concatenamento stringhe eseguito nel modo meno opportuno sia presente in più esempi contenuti nella guida di VS2005 è ormai accertato, ma guardando il codice d'esempio relativo a SymmetricAlgorithm ho notato che, oltre alla citata modalità di concatenamento, non viene neanche eseguita la Dispose() dei due FileStream. Ok, lo stream viene chiuso, e nella chiusura viene invocata la Dispose(), ma essendo codice "didattico" a mio avviso è sicuramente errato dare per scontato che lo sviluppatore (che tendenzialmente consulta la guida per "imparare") conosca il meccanismo interno della classe FileStream. Mi aspetterei piuttosto che ogni "sample", in merito alla Dispose, comunichi il concetto: "se implementa IDisposable, alla fine chiama 'sta Dispose". Anche perchè in una...

Namespace vs Filename

Sebbene siano due aspetti totalmente distinti tra di loro, ho notato che vengono utilizzati diversi approcci per la scelta del nome file di progetto e del namespace principale di progetto. C'è chi crea progetti usando nomi file "corti" (es. MioProgetto, DALMioProgetto, BizMioProgetto), lasciando tali anche i relativi namespace e nome assembly, e chi invece utilizza la nomenclatura "completa" (es. MiaAzienda.MiaSoluzione.MioProgetto, ecc). Considerato che, IMHO, la prima delle due scelte mi sembra la "meno corretta", personalmente tendo a cercare di avvantaggiarmi di entrambe le soluzioni in questo modo: creo la solution vuota col solo nome della stessa (es. MiaSoluzione), poi aggiungo i progetti specificando come filename il...