Credo che assieme a Remoting, CodeDOM rappresenti una parte oscura del framework (almeno per me) anche se, senza saperlo, Visual Studio .NET ne fa grosso uso.
Se vi siete mai chiesti come ASP.NET è in grado di compilare il vostro file .cs oppure come viene generata la proxy class di un WebService, CodeDOM è la risposta.
CodeDOM è una rappresentazione in memoria di codice sorgente indipendente dal linguaggio e, un volta disponibile questa rappresentazione, associandovi l'opportuno provider è possibile generare/compilare codice per quel determinato tipo di linguaggio.
Supponiamo vi venga chiesto di creare un wizard che possa poi generare degli skeleton in C#,VB.NET,J#,VC++ ed eventuali altri linguaggi, CodeDOM vi permette di fare questo.
La sessione ha mostrato un esempio dove attraverso CodeDOM è possibile generare delle strongly typed collection in qualsiasi linguaggio per poi usarlo nel vostro progetto (ok, i generics risolveranno questa necessità, però quante volte abbiamo usato copia e incolla per creare una nuova versione di una collection tipizzata...)
CodeDOM può anche caricare dei files di testo contenenti codice (C#,VB.NET...) verificarli e compilarli, in pratica potete creare un programma dove parte di codice risiede in files di testo esterni.
Ed ora la parte dolente..., il tutto è molto complicato (lo stesso speaker lo ha ammesso) se riuscite ad immaginare cosa voglia dire rappresentare un linguaggio all'interno di un document object model senz'altro capirete che per generare poche linee di codice la quantità di codice che dovete preparare è enorme.
Se la cosa vi ha incuriosito, aprite MSDN e andate nel namespace System.CodeDOM e System.CodeDOM.Compiler.
Good Luck
Next blog, C# best practices