VS2010 http://blogs.ugidotnet.org/Raffaele/category/VS2010.aspx Visual Studio 2010 it-IT Raffaele Rialdi Subtext Version 2.6.0.0 Le Code Dependencies di Visual Studio 2010 http://blogs.ugidotnet.org/Raffaele/archive/2009/05/30/le-code-dependencies-di-visual-studio-2010.aspx <p>Tra le mille nuove bellezze in Visual Studio 2010 ho trovato estremamente utile le Code Dependencies.</p> <p>L'ho subito voluto provare su un progetto che stiamo realizzando che consiste in una elaborazione a pipeline di due documenti XML. La natura del progetto importa poco, diciamo per semplicità che è una mera blackbox lato server che prende dei dati in entrata e spara il risultato in uscita.</p> <p>Dal menu Analyze, "Visualize Code Dependencies", "By Class" si ottiene subito un grafico interessante.</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_4.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_thumb_1.png" width="244" height="125" /></a></p> <p>Appare subito chiaro che il grafico ha alcuni "intrusi" come le dipendenze dagli assembly del Framework ("External"), le interfacce che aumentano inutilemente la complessità nelle dipendenze (vale probabilmente la pena di avere un diagramma separato solo per queste), ed infine le classi del programma di test.</p> <p>Per epurarle si seleziona la classe, e dal menu contestuale si sceglie Selection, Hide. Ecco il risultato:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_6.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_thumb_2.png" width="244" height="120" /></a> </p> <p>Una classe che mi ha subito attirato l'attenzione è la classe statica degli extension methods per XElement, la XElementHelper che ha una dipendenza da BindingInfo. Per avere più dettagli espando la classe XElementHelper e seleziono la BindingInfo, cosa che evidenzia subito il metodo che ha la dipendenza sulla BindingInfo. </p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_10.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_thumb_4.png" width="244" height="101" /></a> </p> <p>Grazie a questa feature ho già eliminato alcune dipendenze dalla GroupInfo (non più visibili in questi screenshot). Devo dire che l'utilità di questi diagrammi è decisamente altissima.</p> <p>Ma un'altra cosa che non vorremmo mai vedere in un progetto sono le circular references:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_12.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_thumb_5.png" width="244" height="120" /></a> </p> <p>La cosa mi ha subito spaventato ma è apparso invece chiaro che si trattava dei factory methods:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_14.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_thumb_6.png" width="244" height="114" /></a> </p> <p>Avrei voluto vedere un'opzione per eliminare le factory dal grafico, e così ho eseguito la submit di un wish su <a href="http://connect.microsoft.com/">Connect</a>. Se lo volete votare, <a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=462064">qui c'è il link</a>.</p> <p>Un altro grafico interessante è questo:</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_16.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/raffaele/WindowsLiveWriter/LeCodeDependenciesdiVisualStudio2010_D868/image_thumb_7.png" width="244" height="244" /></a> </p> <p>Invito tutti a provare questa feature perché sono convinto che possa rendere più evidente alcuni aspetti oscuri del codice. Durante la fase di code review, i diagrammi di Code Depenenciees sono certamente una 'killer feature'.</p><img src="http://blogs.ugidotnet.org/Raffaele/aggbug/96318.aspx" width="1" height="1" /> Raffaele Rialdi http://blogs.ugidotnet.org/Raffaele/archive/2009/05/30/le-code-dependencies-di-visual-studio-2010.aspx Sat, 30 May 2009 16:23:26 GMT http://blogs.ugidotnet.org/Raffaele/archive/2009/05/30/le-code-dependencies-di-visual-studio-2010.aspx#feedback 5 http://blogs.ugidotnet.org/Raffaele/comments/commentRss/96318.aspx http://blogs.ugidotnet.org/Raffaele/services/trackbacks/96318.aspx