Discussioni su ADO.NET Entity Framework

Un argomento caldo in questi giorni è il futuro di ADO.NET Entity Framework. Durante TechEd Developers a Orlando si è parlato molto di ADO.NET Entity Framework, molto meno di LINQ to SQL (che ora non è più in carico al team di C# ma a quello di ADO.NET, che è lo stesso che sviluppa Entity Framework – ma questo sarebbe oggetto di un altro discorso che farò quando capirò anche io i piani che hanno realmente). Per molti aspetti, Entity Framework è un ORM molto giovane, ma è fatto da Microsoft, e questo di per sé ne garantirà un uso diffuso.

A causa delle limitazioni esistenti in questa prima versione, è nata una "mozione di sfiducia" (non so come tradurla diversamente) firmata da poco meno di 300 persone (a oggi). Ad ogni modo, non sono numeri così piccoli. Tim Mallalieu ha risposto a queste critiche e il team di Entity Framework ha inaugurato un blog dedicato alla progettazione e sviluppo della versione 2.0 di Entity Framework.

Personalmente, pur non essendo un forte sostenitore di questa tecnologia, credo di comprendere quale sia il problema di fondo. Alcuni (ma forse molti) considerano ADO.NET Entity Framework come un tool di ORM da comparare con tool simili, come NHibernate. Per Microsoft, non è solo questo. Uno dei punti chiave nella visione di Microsoft è che Entity Framework sia un layer di astrazione sul modello dei dati utilizzabile non solo da programmi scritti in C#/VB/ecc., ma anche da tool di reportistica che rappresentano il modello di entità direttamente all'utente finale che vuole realizzare i suoi report. Io non sono così convinto che sia possibile avere un approccio simile nel 100% dei casi, ma devo ammettere che in molte situazioni questa possibilità è adeguata alle esigenze. Nutro forti dubbi sul fatto che possano amalgamare anche i modelli multidimensionali all'interno di Entity Framework (è una cosa che hanno annunciato di voler fare, anche se a oggi non c'è alcuna traccia di feature che vadano in questa direzione) e il rischio latente è che questa visione "universale" porti a fare scelte nell'adozione di questa tecnologia basate sull'attesa di funzionalità future, che chissà se e quando arriveranno.

Ciò detto, ripeto, il fatto di poter supportare un ambiente di reportistica direttamente da Entity Framework giustifica, in effetti, la necessità di avere un proprio linguaggio di interrogazione (Entity SQL) che non sarebbe necessario usando LINQ to Entities. Il vero problema è decidere se e quando usare questa tecnologia. Oggi come oggi, io sarei cauto e inizierei qualche sperimentazione (soprattutto in scenari dove si può sfruttare la capacità di essere un layer di astrazione superiore e non solo un ORM), senza però fare già scelte definitive. In fondo, è (ancora per poco) un prodotto in Beta.

PS: Forse sta passando di moda il politically correct. Un post che riprende il tema della mozione di sfiducia è questo di Dinesh Kulkarni, a suo tempo (ma ora non più) coinvolto nello sviluppo di LINQ to SQL. Dissacrante e divertente, basta essere disposti a fare un po' di auto-ironia.

Capitoli di esempio del libro Programming LINQ

Sono finalmente disponibili due capitoli di esempio del libro Programming Microsoft LINQ che abbiamo scritto io e Paolo Pialorsi. Di seguito un breve estratto dei contenuti; i link alle pagine di download sono nel titolo dei capitoli. A seguire un elenco di tutti i capitoli inclusi nel libro.

Chapter 6 – Tools for LINQ to SQL

In this chapter, we took a look at the tools that are available to generate LINQ to SQL entities and DataContext classes. The .NET Framework SDK includes the command-line tool named SQLMetal. Visual Studio 2008 has a graphical editor known as the Object Relational Designer. Both allow the creation of a DBML file, the generation of source code in C# and Visual Basic, and the creation of an external XML mapping file. The Object Relational Designer also allows you to edit an existing DBML file, dynamically importing existing tables, views, stored procedures, and user-defined functions from an existing SQL Server database.

Chapter 16 – LINQ and ASP.NET

This chapter showed you how to leverage the new features and controls available in ASP.NET 3.5 to develop data-enabled Web applications, using LINQ to SQL and LINQ in general. Consider that what you have seen is really useful for rapidly defining Web site prototypes and simple Web solutions. On the other hand, in enterprise-level solutions you will probably need at least one intermediate layer between the ASP.NET presentation layer and the data persistence one, represented by LINQ to SQL. In real enterprise solutions, you usually also need a business layer that abstracts all business logic, security policies, and validation rules from any kind of specific persistence layer. And you will probably have a Model-View-Controller or Model-View-Presenter pattern governing the UI. In this more complex scenario, chances are that the LinqDataSource control will be tied to entities collections more often than to LINQ to SQL results.

Programming Microsoft LINQ

  • Part I LINQ FOUNDATIONS
    • 1 LINQ Introduction
    • 2 LINQ Syntax Fundamentals
    • 3 LINQ to Objects
  • Part II LINQ to Relational Data
    • 4 LINQ to SQL: Querying Data
    • 5 LINQ to SQL: Managing Data
    • 6 Tools for LINQ to SQL
    • 7 LINQ to DataSet
    • 8 LINQ to Entities
  • Part III LINQ and XML
    • 9 LINQ to XML: Managing the XML Infoset
    • 10 LINQ to XML: Querying Nodes
  • Part IV Advanced LINQ
    • 11 Inside Expression Trees
    • 12 Extending LINQ
    • 13 Parallel LINQ
    • 14 Other LINQ Implementations
  • Part V Applied LINQ
    • 15 LINQ in a Multitier Solution
    • 16 LINQ and ASP.NET
    • 17 LINQ and WPF/Silverlight
    • 18 LINQ and the Windows Communication Foundation
  • Appendixes
    • A ADO.NET Entity Framework
    • B C# 3.0: New Language Features
    • C Visual Basic 2008: New Language Features

Software Licensing and Protection Services

Ieri e oggi ho avuto modo di valutare le caratteristiche di un prodotto/servizio di Microsoft che sicuramente interesserà molte aziende in Italia (e non solo). Si tratta di Microsoft Software Licensing and Protection Services e fondamentalmente fa due cose:

1.       Protegge il codice (meglio, una parte del codice) dal reverse engineering

2.       Gestisce il licensing

Per quanto riguarda la protezione del codice, il meccanismo è questo: si scelgono una o più funzioni del proprio codice, che vengono convertite da codice IL a codice SVML (Secure Virtual Machine Language). Il codice SVML è eseguibile solo all’interno di una SVM (Secure Virtual Machine) che è specifico per ogni azienda che produce software. In pratica, se la software house A distribuisce del codice, distribuisce anche una SVM che sarà diversa da una software house diversa (B). Il codice SVML è crittografato usando un algoritmo che è decifrabile solo dalla SVM specifica della propria azienda. Una differenza rispetto a IL è che il codice non è compilato dal jitter ma viene sostanzialmente interpretato all’interno della SVM. Di fatto, questo rende tale codice ancora più sicuro di una compilazione in codice managed. Ma ogni cosa ha un prezzo, e qui il prezzo sono le prestazioni, certamente inferiori a quelle del codice IL compilato dal jitter e poi eseguito come codice nativo. Questo rende improponibile proteggere in questo modo tutto il codice di un’applicazione, ma un algoritmo critico (come proprietà intellettuale) che non ha troppe implicazioni prestazionali è certamente un buon candidato per questo servizio.

L’altro servizio offerto è il licensing: la SVM lega il suo funzionamento al controllo di attivazione remoto che consente di controllare le licenze attivate, fornire versioni a tempo, controllare le singole funzioni attive, ecc. ecc.

Costi: al momento chi è ha un abbonamento MSDN ha la versione Evaluation a disposizione e per andare in produzione c’è un costo annuale di gestione (che non ricordo) più 1 dollaro ad attivazione ma… attenzione! Dal 28 luglio 2008 ci saranno significative modifiche. Questo vuol dire che conviene in ogni caso aspettare qualche settimana perché a dire delle persone di Microsoft con cui ho parlato il cambiamento sarà molto importante.

Per saperne di più (in italiano) potete leggere questo esauriente post di Silvano Coriani sull’argomento.

Dopo DevCon 2008, prima di TechEd 2008

Appena finita DevCon 2008 io e Paolo siamo partiti alla volta di Orlando per TechEd 2008 Developers, dove siamo venuti principalmente per raccogliere i feedback sul libro Programming Microsoft LINQ che è appena uscito.

Prima di tutto, un po' di feedback da DevCon: la conferenza ci sembra sia andata bene, dobbiamo ancora esaminare in dettaglio i feedback ma l'impressione è stata buona, anche perché la partecipazione è stata alta anche nelle sessioni che finivano verso le 18.30. Un'impressione che ho avuto è stata quella di un'orientamento verso LINQ to Entities a scapito di LINQ to SQL, nonostante sia un prodotto in Beta (anche se ancora per poco). Uno degli obiettivi che abbiamo a TechEd è anche di capire che aria tira: da molti fattori (blog, agenda e altro ancora…) sembra che LINQ to SQL possa lasciare il passo a LINQ to Entities, ma un conto è ciò che fa Microsoft, un conto ciò che fa il mercato. Se l'adozione di LINQ to SQL sarà significativa, diventerà difficile abbandonarlo senza un percorso di convergenza verso LINQ to Entities (che ne consenta un uso, diciamo così, più ottimizzato ma anche semplificato verso SQL Server, più o meno com'è adesso). Se invece l'adozione sarà scarsa… allora potrebbe anche diventare supportato ma senza avere evoluzioni, di fatto condannandolo a un oblio precoce. Credo sia troppo presto per trarre conclusioni e quando emergerà qualche dato interessante tornerò sicuramente a parlarne.

Visto che parliamo di TechEd… non ci sono grosse novità in vista, l'agenda che ho appena finito di rivedere copre tecnologie rilasciate o in fase di imminente rilascio (come SQL 2008 e Visual Studio 2008 SP1 con relativo .NET 3.5 SP1). Al di là delle molte sessioni su ADO.NET Entity Framework (alcune delle quali anche piuttosto sovrapposte come argomenti, a prima vista), mi ha colpito un certo numero di sessioni apparentemente "fumose" che forse servono a preparare il terreno per PDC 2008. L'unica cosa "strana" è il fatto che tutte le sessioni relative a Microsoft AX 2009 sono segnate in agenda senza descrizione e senza speaker. Aspetteranno la keynote di Bill Gates?

A proposito di Bill Gates: questa sarà l'ultima keynote "importante" della sua carriera, per lo meno di fronte a una platea di sviluppatori. Alla prossima PDC, infatti, non farà più ombra a Ray Ozzie, Chief Software Architect di Microsoft. Ma per PDC ci vuole ancora qualche mese, per i suoi effetti anche qualche anno, quindi per ora affrontiamo il presente.

Nei prossimi giorni vi consiglio di dare un'occhiata ai blog sul sito di Programming LINQ perché specialmente sull'argomento LINQ sarà più probabile che interverremo direttamente lì. Sicuramente tra una settimana faremo comunque un riepilogo su quanto visto qua a Orlando.