Detectando dependencias entre espacios de nombres en.NET
dependencies coupling (5)
Reflector hace esto.
Haga clic derecho en el espacio de nombres, haga clic en Analizar, ¡viola! :)
¿Hay alguna utilidad que pueda examinar un conjunto de ensamblados administrados y decirle si alguno de los tipos en un espacio de nombres depende de alguno en otro? Por ejemplo, supongamos que tengo un espacio de nombres MyApp.BusinessRules
y no quiero que acceda directamente a nada en MyApp.GUI
, pero ambos espacios de nombres están en el mismo ensamblado. Mi objetivo es poder escribir una tarea personalizada de MSBuild que verifique que no se hayan roto varias reglas de acoplamiento.
Hasta ahora, la única herramienta con la que me he encontrado que podría hacer esto es NDepend , pero me pregunto si existe una solución más simple.
Sospecho que NDepend va a ser la forma más sencilla de hacerlo, para ser honesto.
Sin embargo, si realmente no desea que las partes de un ensamblaje se refieran entre sí, casi seguramente dividirá el ensamblaje en unidades más lógicas.
Puede probar la versión RC de Visual Studio 2010 Ultimate para generar gráficos de dependencia para el código .NET. Puede generar un gráfico de todos sus ensamblajes, espacios de nombres, clases o alguna combinación de estos, o puede usar el Explorador de Arquitectura para seleccionar artefactos específicos y las relaciones que desea visualizar.
También puede crear diagramas de capa a partir de gráficos de dependencia o de los artefactos existentes, dibujar las dependencias permitidas y luego incluir la validación de capa como parte del proceso de MSBuild para asegurarse de que no se introduzcan las dependencias no válidas:
Cómo: generar documentos gráficos desde código : http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource
Puede usar Visual Studio Ultimate para explorar las relaciones y la organización en el código existente mediante la generación de documentos de gráficos dirigidos. Estos gráficos representan elementos de código y sus relaciones como un conjunto de nodos que están conectados por enlaces o bordes. Puede usar estos gráficos para ayudarlo a visualizar, explorar y analizar el código.
Cómo buscar código usando Architecture Explorer : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx
Puede seleccionar secciones verticales o "sectores" de código que desee visualizar utilizando Architecture Explorer. Puede explorar el código fuente en una solución de Visual Studio o código administrado compilado en archivos .dll o archivos .exe. Puede utilizar Architecture Explorer para explorar otros dominios instalando proveedores adicionales. Cuando encuentre el código que desea visualizar, puede generar gráficos para explorar las relaciones en ese código.
Cómo: Crear diagramas de capa a partir de artefactos : http://msdn.microsoft.com/en-us/library/dd465141%28VS.100%29.aspx
... use diagramas de capa para visualizar la arquitectura de alto nivel de su sistema y para verificar que el código cumpla con este diseño. Para realizar esta tarea, organice y asocie los artefactos de una solución de Visual Studio a grupos lógicos, abstractos o capas. Estas capas describen las principales tareas que realizan estos artefactos o los principales componentes de su sistema. Las flechas entre las capas representan las interdependencias que existen o deberían existir entre estos artefactos. Para imponer restricciones arquitectónicas en el código, describa las dependencias previstas en el diagrama y luego valide el código con el diagrama. Al usar diagramas de capa de esta manera, puede ayudar a que el código sea más fácil de comprender, reutilizar y mantener.
Diagrama de capa http://i.msdn.microsoft.com/Dd465141.UML_LayerRefReading(en-us,VS.100).png
Cómo: Validar el código contra los diagramas de capa : http://msdn.microsoft.com/en-us/library/dd409395%28VS.100%29.aspx
Validar el código contra un diagrama de capa lo ayuda a imponer restricciones arquitectónicas sobre el código a medida que evoluciona. Cuando realiza esta tarea, las dependencias en el código se comparan con las dependencias del diagrama.
Descarga de RC : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a .
Foro de Visual Studio 2010 Architectural Discovery & Modeling Tools : http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads
Puede analizar las dependencias del espacio de nombres con el complemento DSM para .NET Reflector (soy su desarrollador)
Una vez que se analizan los conjuntos, puede guardar el proyecto en un archivo. Este archivo es solo XML con una estructura simple para que pueda pasarlo a una secuencia de comandos para el análisis personalizado
[Actualización] : este complemento ya está disponible en forma de complemento de Visual Studio
Hasta ahora, la única herramienta con la que me he encontrado que podría hacer esto es NDepend, pero me pregunto si existe una solución más simple.
Soy uno de los desarrolladores de la herramienta NDepend . ¿Podrías decirnos qué encuentras complicado en NDepend y cómo te imaginas una solución más simple para ti?
NDepend viene con 3 maneras diferentes de hacer lo que desee: Matriz de dependencias , Gráfico de dependencias y también puede escribir algunas reglas de código sobre consultas LINQ (CQLinq) y reglas para detectar el ciclo entre espacios de nombres o imponer algunas dependencias particulares.
Por ejemplo, supongamos que tengo un espacio de nombres MyApp.BusinessRules y no quiero que acceda directamente a nada en MyApp.GUI, pero ambos espacios de nombres están en el mismo ensamblado.
Para eso, se puede escribir la siguiente regla CQLinq, ¿podría ser más simple que eso ?:
warnif count > 0
let businessRules = Application.Namespaces.WithNameLike("^MyApp.BusinessRules")
let gui = Application.Namespaces.WithNameLike("^MyApp.GUI")
from n in businessRules.UsingAny(gui)
let guidNamespacesUsed = n.NamespacesUsed.Intersect(gui)
select new { n, guidNamespacesUsed }