in

DotNetMarche

.NET Framework User Group delle Marche

This Blog

Syndication

ExternalBlogs

November 2011 - Posts

  • Perché non uso generatori di codice con Nhibernate

    Talvolta mi viene chiesto se conosco qualche generatore di codice per NHibernate, ovvero qualche cosa che possa partire da un database e possa generare classi e mapping in modo da essere operativi con NH in poco tempo. Sinceramente ne conosco qualcuno, ma non li ho mai usati.

    La ragione è forse in questo post, se ho già un databse fatto, la cui struttura non verrà modificata troppo spesso, Entity Framework mi permette una più rapida operatività, ma mi genera un object model che è tutto tranne che OOP. Ripeto infatti quello che ho scritto tempo fa, per me EF è ancora un Super-Dataset, anche se la direzione che sta prendendo è decisamente interessante.

    In realtà la ragione vera è che se voglio un ORM con tutti i crismi, come NH, allora è perchè voglio lavorare Entity First, e l’ORM dovrebbe permettermi di usare un DB SQL nella maniera più trasparente possibile. Se mi trovo a dovere generare il modello dal DB, significa che mi basta un dataset.

    La seconda ragione è che ogni generatore di codice genera quello che gli pare, mentre io ho le mie classi base, i miei pattern per le proprietà, etc etc, e non mi piace che le classi di Dominio, ovvero quelle dove dovrebbe stare la logica, vengano generate su uno schema imposto da chi ha fatto il generatore. (questo anche se poi con le partial class posso andare ad “aggiungere” alle classi generate).

    Insomma, se dovete generare classi da db, magari EF è la soluzione migliore.

    Gian Maria.

  • QFE ed hotfix per Microsoft Test Manager

    Dato che la mia sessione al WPC trattava appunto di Microsoft Test Manager, voglio segnalarvi un post del team di Visual Studio dedicato al testing che lista tutte le varie fix ed aggiunte che sono state fatte a MTM dopo la sua uscita in RTM l’anno scorso.

    La lista si trova a questo indirizzo http://blogs.msdn.com/b/vstsqualitytools/archive/2011/11/29/qfes-for-microsoft-test-manager-2010.aspx e se usate MTM vi consiglio di leggerla e verificare che abbiate installato tutte le patch. Alcune di esse correggono bug aumentando la stabilità del prodotto, altre invece aggiungono anche delle funzionalità aggiuntive, come ad esempio la possibilità di fare steps multiriga.

    Buona installazione.

    Gian Maria.

  • Cosa mi piace di Entity Framework

    Leggendo questo post di Ayende concordo sul fatto che EF è sicuramente utile se ho un database legacy che debbo principalmente leggere, o dove non devo modificare troppo i dati. Con due click infatti si può importare tutta la struttura e iniziare subito a lavorarci, con un prodotto che è comunque molto migliore di un Dataset.

    La cosa che non mi è mai piaciuta di EF Designer, è che se il db è in continua evoluzione è un po “goffo” da gestire, ma se debbo “leggere” da un db esistente mi garantisce l’operatività in un paio di minuti, fattore che trovo decisamente interessante.

    Gian Maria.

  • Dove metto cosa?

    Spesso noto che i problemi delle applicazioni, non sono da ricercarsi in una architettura poco strutturata o inefficiente o quant’altro, ma proprio nelle basi di come strutturare un progetto.

    Ad esempio, indipendentemente da che architettura/struttura utilizziamo, se stiamo usando o meno ORM WCF o quant’altro, una delle regole principali è: Quando voglio aggiungere un file sorgente e quindi solitamente una classe, dove la metto?

    Non c’è nulla che uccida di più la manutenibilità di un software di trovare ad esempio dto sparsi un po in ogni dove, oppure classi di accesso al database un po qui ed un po’ là. Il mio consiglio è sempre quello di pensare un poco prima di “tirare il codice dentro ai progetti”, ovvero scrivere codice nel primo punto dove capita. Spendere del tempo a strutturare ed organizzare il codice sorgente paga sempre ;).

    Gian Maria.

  • Link su Denali

    Nel mio blog in inglese ho fatto un post in cui ho messo qualche link interessante riguardo i nuovi SSDT introdotti da Juneau. Per chi è affezionato ai Database Project noterete purtroppo alcune mancanze nei nuovi tools, cosi come delle aggiunte. Naturalmente i due tipi di progetto possono essere usati Side By Side, e quindi potete comunque sfruttare tutte le caratteristiche dei vecchi Database Projects senza problemi.

    Alk.

  • [Entity Framework v4] Creazione dei tipi proxy

    L’approccio POCO di Entity Framework v4 permette di applicare la persistence-ignorance anche su oggetti custom attraverso la creazione a runtime (via Reflection.Emit ) di proxy dinamici che li derivano in modo da permettere all’EF di implementarci sopra...
  • Test Mode

    Sembra una considerazione stupida, ma in ogni progetto di UI tendo a mettere un Test Mode abilitabile nel config che mi permette di semplificare il testing. Anche se costruite il vostro applicativo in MVVM puro con WPF e usate lo unit testing, è spesso necessario lanciare l’applicativo completo per verificare una determinata interfaccia del sistema, operazione che può diventare spesso tediosa. Oppure banalmente dovete prima o poi fare un integration test, replicare un bug, etc, e quindi dovete usare l’applicazione in modalità full e verificare il comportamento di una determinata sezione dell’applicativo.

    Ad esempio ho una situazione in cui debbo

    • effettuare il login
    • aprire una interfaccia da un menu nella systray
    • da questa interfaccia andare ad aprire la vista che voglio verificare

    La perdita di tempo è molto elevata, soprattutto perché il programma in questione apre una serie di Viste di default che comunicando con i servizi rallentano comunque il tempo di risposta durante lo startup, facendo perdere tempo ogni volta che il programma viene lanciato. Debbo poi andare nella systray, andare ad aprire il menu con il tasto destro, selezionare la vista che voglio testare, etc. etc.

    In questo caso il Test Mode consiste nel mettere una stringa nell’app.config che contiene user name, password, e il nome della vista da aprire. Quando il programma parte, se esiste la stringa di test mode, la analizza, fa la login ed apre solamente la vista richiesta, riducendo il tempo di startup e permettendomi di premere F5 e di non dovere fare nulla di ulteriore per poter interagire con la vista in questione. Questa tecnica sembra banale, ma spesso vedo persone che prima di poter testare qualche cosa attraverso la UI sono costretti a fare numerosi click, perdendo quindi molto tempo.

    Se strutturate da subito la vostra applicazione in modo da poter sempre far partire una determinata parte di UI in test mode troverete molto risparmio di tempo in futuro :).

    Gian Maria.

  • Shortcut interessanti di Visual Studio: Edit–NavigateTo

    Questa shortcut è CTRL+, (control più tasto Virgola) ed è una delle più interessanti introdotte con Visual Studio 2010. Per chi non ha Resharper, questa funzionalità sarà sicuramente mancata. Supponiamo di voler cercare il View Model di una vista chiamata TreeNavigatorView, oppure in generale vi ricordate che nel vostro codice esiste un controller per la vista chiamata TreeNavigator, allora potete premere CTRL+, e digitare parte del nome che state cercando per vedere tutte le occorrenze nel progetto corrente.

    image

    Come potete vedere potete usare la sintassi * per matchare qualsiasi sequenza di caratteri, e la cosa interessante è che sono supportate le convenzioni. Dato che le classi sono Pascal Case, ogni parola viene capitalizzata, se so che la classe si chiama TreeNavigatorViewModel, posso scrivere TNVM.

    image

    Oppure se voglio il mapping della classe Item, senza dover andare a navigare nel solution explorer o solution navigator alla ricerca dell’assembly con i mapping per poi cercare quello di item posso digitare item.hbm e trovare subito il file.

    Una funzionalità interessante è questa, supponiamo di stare in un file dove è definita un’interfaccia e di voler vedere per un metodo tutte le sue implementazioni. Se posizioniamo il cursore sopra la definizione del metodo di interfaccia e premiamo CTRL+, VS apre la NavigateTo con dentro automaticamente compilato il nome del metodo, rendendovi semplice vedere in che classi è stato definito.

    La navigazione nel codice non è mai stata cosi facile.

    Gian Maria.

  • Sono realmente Object Oriented?

    Noto che tutti i post che parlano di DDD raccolgono molti commenti, segno che l’argomento è caldo e che le persone nutrono molto interesse in questo nuovo movimento, la domanda è: stiamo realmente parlando di qualche cosa di nuovo?

    La mia personale opinione è che, seguendo sempre di più il movimento DDD, tutte le tecniche, pattern, concetti che emergono sono semplicemente quelli dell’Object Oriented Programming, ovvero concetti che sono in giro da quasi venti anni, allora la domanda è: Perchè proprio ora tutto questo interesse? A mio avviso la risposta deve essere cercata in una necessaria “sedimentazione” che tutte le nuove tecnologie debbono superare affinché riescano veramente ad emergere.

    Quando i primi linguaggi veramente ad Oggetti hanno iniziato a fare capolino, si è subito iniziato a parlare di concetti veramente nuovi, delle vere breaking-changes epocali, come ad esempio l’incapsulamento, ma ogni cambiamento radicale ha bisogno di tempo per essere metabolizzato. Prendiamo ad esempio proprio il concetto di incapsulamento, e vediamo un estratto della definizione di wikipedia

    encapsulation means that the internal representation of an object is generally hidden from view outside of the object's definition. Typically, only the object's own methods can directly inspect or manipulate its fields

    Da qui possiamo subito vedere che la rappresentazione interna (lo stato) è nascosto, e che solo i metodi propri dell’oggetto possono ispezionare o manipolare i suoi campi (lo stato). Da qui il concetto che i property setter e getter sono antipattern e che nessun oggetto dovrebbe avere altro che metodi. Capisco che questa affermazione suona sempre radicale, ma in CQRS e soprattutto con l’Event Sourcing tutto il discorso torna e spesso porta con se semplificazioni veramente drammatiche del codice.

    Se qualcuno di voi si è mai trovato a rispondere al seguente quesito “sto modificando questa proprietà di un oggetto, quale altro codice la usa?” capirete cosa voglio dire. Quindi, sempre per mia personalissima opinione, per anni i linguaggi ad oggetti sono stati usati in modo prettamente procedurale e data oriented. Un segnale di questo è l’enorme volume di discussione legata agli ORM, che mi fa sospettare che le persone siano troppo focalizzate sui Dati piuttosto che sulle “operazioni”. Se noi pensiamo veramente in termini di oggetti e metodi, difficilmente avremo cosi tanto da discutere su un ORM.

    L’interesse che in questi anni si sta creando attorno al DDD, secondo me, è semplicemente dovuto al fatto che, dopo un lungo tempo di sedimentazione, tutti i concetti base dell’OOP stanno tornando nuovamente a galla, ora che i tempi sono probabilmente più maturi.

    Gian Maria.

  • Post considerazioni sull’evento SQL Start

    L’evento SQL Start, tenuto ad ancona in data 11/11/11 :) mi ha dato sicuramente molte soddisfazioni, per molte ragioni. La prima è che è sempre bello organizzare eventi Cross Community, e poter collaborare con UGISS che ha organizzato l’evento è stato veramente piacevole, soprattutto grazie al grande lavoro di Danilo che si è impegnato fortemente per la realizzazione di questo evento.

    La soddisfazione maggiore è stata nel numero di partecipanti. Organizzare in Ancona una intera giornata, con due track parallele non è cosa da poco, ed avere la preoccupazione di non avere abbastanza posto nelle sale è decisamente soddisfacente, perchè avere 165 iscritti significa che si è messo in piedi un evento che ha attirato interesse.

    Un doveroso grazie quindi nuovamente a Danilo e a tutto il team di UGISS per avere organizzato l’evento qui da noi nelle Marche, un grazie a tutto lo staff DotNetMarche per avere collaborato alla riuscita e un doveroso grazie a Giuliano Latini e a tutta l’Università di Ancona per l’ospitalità eccezionale che ha permesso di usufruire di una location decisamente professionale per l’evento. Mi sento di fare una menzione speciale per Stefano Ottaviani, che oramai è il nostro Cameramen di fiducia, oltre che a curare la registrazione con la sua telecamera durante gli eventi, è la persona che si sbatte dietro le quinte per fare i montaggi e pubblicare i video sul canale di Vimeo di DotNetMarche, non solo dei nostri eventi, ma anche di altre community (sabato sarà all’agile day). Dato che come tutti noi è sempre pieno di lavoro, merita un ringraziamento speciale per il tempo che dedica alla community in modo che tutti possano poi usufruire delle registrazioni video.

    Anche in questo caso, come vuole la tradizione, il dopo-conferenza è stato all’altezza dell’evento, potete qui infatti vedere i resti di “una” delle X fiorentine (il numero è sotto NDA) che ci siamo sbafati da Pippo.

    WP_000788

    Naturalmente dopo cosi tanta carne, non poteva mancare un dolcetto alla spuma di mascarpone e nutella per sgrassare il palato.

    WP_000789

    Alla prossima !! :)

    Gian Maria.

  • Avete le date sbagliate in SharePoint Online?

    A me è capitato e credo che possa a capitare quanto meno ai primi che hanno acquistato una licenza di Office 365 e a quelli che, come me, venivano dalla beta. Facendo caso alle date di creazione e di modifica dei vari documenti all'interno delle mie...
  • Framework per DDD

    Questo post era ancora in draft nel mio HD ed è tornato alla ribalta con una discussione con Stefano. Si parlava di realizzazioni di framework per DDD, argomento quantomeno caldo e anche controverso.

    Partiamo dal presupposto che nella community è grande l’interesse per il DDD, ma scarseggia il codice, soprattutto per pattern più complessi come Event Sourcing e CQRS, quindi sembra sicuramente interessante costruire un framework DDD per supportare questi pattern, ma la domanda vera è: è possibile?

    A mio avviso la risposta è no, trovo infatti molto difficile pensare a come possa essere strutturato un framework utilizzabile in produzione per DDD da team e persone differenti. I problemi sono troppi e soprattutto secondo me si va a cozzare con il concetto stesso di DDD, il cui valore è soprattutto nel Modello e non nell’implementazione. Di questo ho già parlato in un recente post, ma la discussione con Stefano ha riportato questo draft a galla e quindi volevo fare alcune considerazioni ulteriori.

    La prima difficoltà nella realizzazione di un framework per DDD è: che tecnologia usare? Se partiamo dal concetto di BOUNDED CONTEXT, e lo applichiamo in maniera seria, ci si rende conto che ogni BOUNDED CONTEXT fa storia a se, qualcuno potrebbe essere basato su CQRS, un altro BOUNDED CONTEXT potrebbe leggere semplicemente i dati con un DataReader e fare Update secche ad un db relazionale, altri potrebbero basarsi su NO SQL, o su file XML etc etc. Se volessimo creare un framework per DDD dovremmo pensare a tutte le possibili implementazioni e combinazioni (CQRS con DB NO SQL, CQRS con DB Relazionale, ORM Su DB Relazionale, Accesso Diretto su NO SQL, Accesso Diretto su DB Transazionale, etc etc) e stiamo parlando solamente della parte di storage; se iniziassimo a parlare anche di messaggistica, di come separare tra tier andremmo ad aprire un vaso di pandora da cui difficilmente potremo districarci. Trovo difficile creare una infrastruttura cosi flessibile da poter “pluggare” queste tecnologie in maniera trasparente, ma soprattutto trovo “poco utile” cimentarsi in questa impresa, andando quindi a risolvere probabilmente una parte “non core” del DDD, ovvero l’implementazione.

    La seconda difficoltà è che ogni BOUNDED CONTEXT può avere modelli strutturati in maniera fortemente differente, se siamo in una parte “core” dell’applicativo, con Business Rules che cambiano spesso e che sono complesse, CQRS ed oggetti senza proprietà pubbliche sono sicuramente la scelta migliore. Per altri BOUNDED CONTEXT, con meno regole e più legati ai “dati” che alle “operazioni”, il modello potrebbe essere molto più anemico, lasciando delle operazioni a carico dei Servizi. Il nostro ipotetico framework dovrebbe quindi poter operare con due implementazioni completamente differenti di entità, con il rischio di realizzare qualche cosa che non sia effettivamente omogenea.

    Il terzo scoglio è che un framework corre il rischio di trovarsi a fare delle scelte idiomatiche, ovvero legate alla tecnologia su cui esso è basato. Se ad esempio creiamo un modello di interrogazione dei dati basato su LINQ, sarà impossibile portarlo in altre tecnologie dove LINQ non è presente, oppure troveremo molte difficoltà se il motore di persistenza non implementa in maniera veramente completa il provider (leggi NHibernate). In caso di oggetti senza proprietà pubbliche poi, LINQ non è utilizzabile indipendentemente dal provider.

    La conclusione è che la community DDD è nuova e probabilmente quello che serve è una serie di “reference implementation” con casi molto semplici, il cui scopo è semplicemente permettere alle persone di avere dei punti di partenza sui cui basarsi. Lo scenario potrebbe essere questo: “mi trovo in una situazione in cui non posso usare NO SQL, il cliente vuole solamente SQL Server, debbo fare CQRS ed Event Sourcing. Da dove parto?”. Quello che serve è una serie (due o tre almeno) di possibili implementazioni semplici di una simile struttura, senza la presunzione di framework, esattamente come avviene nel libro del Pattern del GoF.

    Quindi a mio avviso la community DDD avrebbe bisogno non di framework, ma di una maggiore formalizzazione dei pattern più avanzati (CQRS, Event Sourcing, Domain Events, etc) con reference implementation, o ancora meglio, implementazioni reali su problemi concreti della serie: “this is how I did it”.

    Attendo opinioni/linciaggi :).

    Gian Maria.

  • SharePoint @ WPC

    Tra esattamente 10 giorni entra in scena WPC qui a Milano. Come dicevo, oltre a tutte le tecnologie "del momento", ci sarà spazio anche per noi "sharepointiani" con ben 8 sessioni. Eccole nel dettaglio: DEV - [D3022] SharePoint Online...
  • DDD-Day: pubblicato il materiale (video, slide e codice)

    Ci è voluto un po’ più del solito, ma finalmente il materiale del DDD-Day è stato pubblicato, video compresi!

    In attesa che vengano fatti i link dal sito del DDD-Day, potete accedere al materiale da questo album di Vimeo: http://vimeo.com/album/1721725 
    Associato ad ogni video troverete il materiale della relativa sessione.

    Buon divertimento :)

    PS: esiste anche un video dell’ultima sessione di Greg Young, per ora lo potete vedere da qui: http://dl.dropbox.com/u/16632432/ddd-day/greg-ddd.m4v

  • Una coppia di post interessanti per chi amministra TFS

    Amministrare un’installazione di TFS abbastanza grande può essere complesso, è interessante quindi poter capire lo stato di salute del proprio server.

    In questo post, Grant Holliday fornisce un nuovo set di report la cui funzione è quella di monitorare lo stato del DataWarehouse e dei Cubi di TFS. Questi report sono molto interessanti per dare uno stato di salute dei cubi Olap su cui sono basati tutti i report di TFS.

    In questo secondo post, viene invece fornito un ulteriore set di report la cui funzione è quella di monitorare le performance generali di TFS. Chiaramente questi report sono fondamentali per la Developer Division Instance di TFS a Redmond, che ha più di 3.500 utenti attivi e processa circa 10.000.000 (si avete letto bene, dieci milioni) di richieste relative al source control e Work Items. Probabilmente i vostri numeri sono sicuramente più piccoli, ma se dovete gestire installazioni grandi, questi report possono aiutarvi molto.

    Happy TFS.

    Gian Maria.

More Posts Next page »
Powered by Community Server (Commercial Edition), by Telligent Systems