Pregunta

¿Cuáles son las cosas que debería buscar cuando produzco un gráfico de dependencia?

O para decirlo de otra manera, ¿cuáles son las características de un gráfico atractivo frente a uno malo?

Editar: El contexto aquí es mi primer vistazo a mis asambleas en NDepend.

¿Fue útil?

Solución

El mayor problema que puedes detectar es definitivamente los ciclos de dependencia. La herramienta NDepend propone una Matriz de dependencia y una Gráfico de dependencia que ayudará a detectar ciclos de dependencia . Descargo de responsabilidad: soy uno de los desarrolladores de la herramienta

ingrese la descripción de la imagen aquí

Observe que la matriz de dependencia está mucho más adaptada que la gráfica para detectar ciclos. Porque un ciclo evita que la matriz sea triangular.

Los otros rangos de problemas están relacionados con la estructura de su aplicación: por ejemplo, ¿es normal que la interfaz de usuario use directamente la base de datos? O mucho peor, ¿el DB depende de la interfaz de usuario?

Puede escribir reglas de código sobre consultas LINQ (CQLinq) para verificar que estén prohibidas dependencias La siguiente regla de código comprueba que los tipos de IU no deberían usar directamente los tipos de DB:

// <Name>UI layer shouldn't use directly DB types</Name>
warnif count > 0

// UI layer is made of types in namespaces using a UI framework
let uiTypes = Application.Namespaces.UsingAny(Assemblies.WithNameIn("PresentationFramework", "System.Windows", "System.Windows.Forms", "System.Web")).ChildTypes()

// You can easily customize this line to define what are DB types.
let dbTypes = ThirdParty.Assemblies.WithNameIn("System.Data", "EntityFramework", "NHibernate").ChildTypes()
              // Ideally even DataSet and associated, usage should be forbidden from UI layer: 
              // http://stackoverflow.com/questions/1708690/is-list-better-than-dataset-for-ui-layer-in-asp-net
              .Except(ThirdParty.Types.WithNameIn("DataSet", "DataTable", "DataRow"))

from uiType in uiTypes.UsingAny(dbTypes)
let dbTypesUsed = dbTypes.Intersect(uiType.TypesUsed)
select new { uiType, dbTypesUsed }

Otros consejos

un gráfico de dependencia de qué? clases? procedimientos almacenados?

los ciclos son malos ...

Si cambiar una dependencia significa que necesita cambiar muchas otras, es malo.
Pero sí, algún contexto podría ayudar.

No sé qué muestra NDepend, pero los artefactos que tienden a aparecer en muchas secciones (en particular, secciones no relacionadas) del código tienden a ser malos (IMHO). He pensado en eso como " Código de cáncer " ;.

Un orador en una conferencia de NFJS nos mostró algunos gráficos de dependencia ... Un olor que señaló fue buscar cosas relacionadas con las diferentes partes funcionales de su base de código. Estos probablemente rompen la encapsulación.

También vería la complejidad general de cada sección ... las que tienen líneas por todas partes son sospechosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top