当我生成依赖图时,我应该寻找什么?

或者换句话说,好看的图表与坏图表的特征是什么?

编辑:这里的上下文是我第一次看到NDepend中的程序集。

有帮助吗?

解决方案

你能发现的最大问题肯定是Dependencies Cycles。 NDepend工具提出了一个交互式依赖矩阵依赖图将有助于发现依赖性问题免责声明:我是该工具的开发人员之一

请注意,依赖矩阵比图更适应于循环。因为循环避免矩阵为三角形。

其他问题范围与您的应用程序结构有关:例如,UI直接使用数据库是否正常?或者更糟糕的是,数据库依赖于UI?

您可以编写 LINQ查询代码规则(CQLinq)以检查是否禁止依赖。以下代码规则检查UI类型不应直接使用数据库类型:

// <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 }

其他提示

什么的依赖图?班?存储过程?

周期很糟糕......

如果改变一个依赖意味着你需要改变很多其他依赖,那就很糟糕了 但是,某些情况可能有所帮助。

我不知道NDepend显示的是什么,但是往往会进入许多部分(特别是不相关的部分)代码的工件往往会很糟糕(恕我直言)。我认为这是“癌症代码”。

NFJS会议的发言人向我们展示了一些依赖图...... 他指出的一个气味就是寻找与代码库不同功能部分有关系的东西。这些可能会破坏封装。

另外,我会看一下每个部分的一般复杂性......那些遍布各个部分的人都是嫌疑人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top