Linq in Action, valido libro sul linguaggio dell’anno
TITOLO: Linq in action http://www.manning.com/marguerie/
AUTORI: FABRICE MARGUERIE, STEVE EICHERT e JIM WOOLEY
EDITORE: Manning Publications Co. www.manning.com
PREZZO: $ 49,90 (sconto 25% se accoppiato a “C# in depth”)
ORDINI PER email: orders@manning.com
Abstract for foreigner readers
(I lettori italiani, che proprio non comprendono l’inglese (!) possono saltare questo proemio)
Manning Publications presents LINQ in Action as “a fast-paced, comprehensive tutorial for professional developers who want to use LINQ, a new extension to the Visual Basic and C# programming languages designed to simplify data queries and database interaction”.
This book covers about the entire LINQ spectrum , from “Hello World” code samples and the new C# 3.0 and VB.NET 9.0 features to LINQ’s extensibility and a tour of all the LINQ providers, therefore it offers to developers everything they need to create applications that take advantage of the new, powerful features of Linq. This book explore the Linq technology and the additions have been made to the C# and VB.NET languages, as well as to the .NET class library.
Last but not least, this book has a very pleasant, artistic typographical face, as all Manning books do.
Come è noto, Linq non è semplicemente un potente e innovativo linguaggio dedicato alla gestione di tutte le possibili basi di dati – dalle collezioni di oggetti in memoria ai DBMS più diffusi sul mercato ai file del sempre più diffuso formato XML (di tipo gerarchico, non relazionale!) – una gestione unificata all’insegna del linguaggio di query SQL, rinnovato opportunamente nei diversi ambienti trattati (“provider”, in gergo Linq).
Linq ha anche se non soprattutto il pregio di essere una libreria perfettamente integrata nel framework di Visual Studio, che così viene rinnovato, potenziato e semplificato anche in tutti i suoi aspetti. Un caso esemplare che chi scrive cita volentieri è quello dell’ordinamento di un array di oggetti: nel vecchio mondo .NET per sfruttare il metodo Sort applicato a un tale vettore – esempio: Array(miacoll).Sort - occorreva entrare in un incubo, definendo come Icomparable la/le proprietà interessata/e della specifica classe (cosa pressoché impossibile con classi chiuse create da altri...). Con Linq basta invece una specifica clausola OrderBy per risolvere questo (e altri) problemi, su oggetti propri o altrui.
I potenziamenti apportati da Linq ne spiegano il successo e il rapido diffondersi di libri dedicati, tra cui i validi testi di autori italiani: Paolo Pielorsi e Marco Russo (Microsoft Press e Mondadori) e Alessandro Del Sole (FAG). Non è il caso però di fare paragoni né graduatorie, trattandosi sempre di testi validi, tuttavia possiamo dire che Linq in Action benché non copra temi particolari come Linq to Entities o Linq e ASP.Net (trattati nell’ottimo manuale di Del Sole) ha le seguenti caratteristiche distintive circa i contenuti e l’esposizione. Alle quali ci piace aggiungere la piacevole, diremmo artistica, veste tipografica tipica della produzione Manning, come la copertina da libro, appunto, d’arte, l’impaginazione elegante e riposante e i font graziosi (quelli dei titoli li abbiamo qui stesso “rubati”).
- Chiare ed esaurienti introduzioni al tema. Quella storica deriva dall’esperienza dei tre autori, MVP di lungo corso come beta tester di Linq e, a quanto essi vantano, come collaboratori di Microsoft. L’introduzione di anteprima offre una panoramica concettuale e funzionale, sulle novità e sulle prospettive di Linq. Di entrambe pertanto si può raccomandare la lettura anche da parte di CIO e/o IT manager non codificatori.
- Figure e schemi illustrativi più abbondanti rispetto ai normali manuali di programmazione (quelli formati da soli listati risultano un po’ aridi, no?).
- Diversi esempi originali. Qui ripetiamo che anche nei manuali rivali non mancano certo, ma Linq On Action qua e là si distingue per opportune comparazioni fra il vecchio e il nuovo mondo, ben evidenziando così i vantaggi in termini di semplicità e compattezza del codice che Linq consente. Inoltre questo è uno dei pochi se non l’unico testo che, per contro, fornisce spunti (non trionfalisti) sui possibili scotti di performance che l’uso di Linq in certi casi può presentare.
In sintesi, il libro guida il lettore alla comprensione e all’uso concreto del nuovo “bestiario” di Linq, comprendente gli operatori per query, le espressioni lambda, e gli expression trees. Qui va detto che (a nostro avviso) i primi sono di immediata comprensione, mentre gli altri compensano le semplificazioni che Linq introduce con nuovi ma delicati concetti e sottigliezze sintattiche. Sui quali il libro offre spunti e chiarimenti opportuni, sempre ben corredati da esempi, tra cui interessanti quelli sull’uso ibrido di fonti eterogenee, e che arrivano a coprire anche il data processing avanzato, come l’estensibilità offerta da Linq, grazie alla quale si possono interrogare altre fonti di dati rispetto a quelle supportate per default.
Contenuti in breve
PART 1 GETTING STARTED
1 ¦ Introducing LINQ
2 ¦ C# and VB.NET language enhancements
3 ¦ LINQ building blocks
PART 2 QUERYING OBJECTS IN MEMORY
4 ¦ Getting familiar with LINQ to Objects
5 ¦ Beyond basic in-memory queries
PART 3 QUERYING RELATIONAL DATA
6 ¦ Getting started with LINQ to SQL
7 ¦ Peeking under the covers of LINQ to SQL
8 ¦ Advanced LINQ to SQL features
PART 4 MANIPULATING XML
9 Introducing LINQ to XML
10 ¦ Query and transform XML with LINQ to XML
11 ¦ Common LINQ to XML scenarios
PART 5 LINQING IT ALL TOGETHER
12 ¦ Extending LINQ
13 ¦ LINQ in every layer
Due parti in dettaglio
Per brevità, riportiamo solo gli indici dettagliati di due parti. Senza ovviamente togliere nulla all’importanza del Linq nel trattamento database “classici” (ove Sql già esisteva), indichiamo quelli relativi alle parti forse più nuove, quella sulle query di oggetti in memoria (perché di fatto semplificano e arricchiscono l’ambiente OOPP di Visual Studio) e quella rivolta all’XML.
Qua e là abbiamo evidenziato in rosso e grassetto temi che di per sé si presentano avanzati, e che di fatto alla lettura si sono rivelati ben e chiaramente approfonditi.
PART 2 QUERYING OBJECTS IN MEMORY
4 Getting familiar with LINQ to Objects
4.1 Introducing our running example
Goals Features The business entities
Database schema Sample data
4.2 Using LINQ with in-memory collection
What can we query? Supported operations
4.3 Using LINQ with ASP.NET and Windows Forms
Data binding for web applications ¦ Data binding
for Windows Forms applications
4.4 Focus on major standard query operators
Where, the restriction operator Using projection
Operators Using Distinct Using conversion
operators Using aggregate operators
4.5 Creating views on an object graph in memory
Sorting Nested queries Grouping
Using joins Partitioning
5 Beyond basic in-memory queries
5.1 Common scenarios
Querying nongeneric collections Grouping by multiple
criteria Dynamic queries LINQ to Text Files
5.2 Design patterns
The Functional Construction pattern The ForEach
pattern
5.3 Performance considerations
Favor a streaming approach Be careful about immediate
execution Will LINQ to Objects hurt the performance of my
code? Getting an idea about the overhead of LINQ to
Objects Performance versus conciseness: A cruel
dilemma?
Come anticipato, l’importante paragrafo 5.3 affronta le questioni sull’“appesantimento” (overhead) e sulla possibile riduzione delle prestazioni, problematiche che, più o meno inevitabilmente, ogni linguaggio che agisce “a livello più elevato” rispetto a quello sottostante (C# o VB normali, nella fattispecie) presenta. Il trattamento di questo cruel dilemma evita quantomeno le facilonerie e le aspettative eccessive.
PART 4 MANIPULATING XML
9 Introducing LINQ to XML
9.1 What is an XML API?
9.2 Why do we need another XML programming API?
9.3 LINQ to XML design principles
Key concept: functional construction Key concept: contextfree
XML creation Key concept: simplified names
9.4 LINQ to XML class hierarchy
9.5 Working with XML using LINQ
Loading XML Parsing XML Creating
XML Creating XML with Visual Basic XML literals
Creating XML document Adding content to XM
Removing content from XML Updating XML
content 344 Working with attributes Saving
XML
10 Query and transform XML with LINQ to XML
10.1 LINQ to XML axis methods
Element Attribute Elements Descendants
Ancestors ElementsAfterSelf, NodesAfterSelf,
ElementsBeforeSelf, and NodesBeforeSelf ¦ Visual Basic XML
axis properties
10.2 Standard query operators
Projecting with Select Filtering with Where
Ordering and grouping
10.3 Querying LINQ to XML objects with XPath
10.4 Transforming XML
LINQ to XML transformations Transforming LINQ to
XML objects with XSLT
Anche qui la nostra sottolineatura evidenzia gli aspetti più approfonditi del “braccio” XML di LINQ, in particolare il paragrafo 10.3, che getta un ponte fra il nuovo mondo LINQ e la precedente sintassi standard XPath. Da leggere e meditare, per evitare equivoci e confusioni.
?>