题
当我生成依赖图时,我应该寻找什么?
或者换句话说,好看的图表与坏图表的特征是什么?
编辑:这里的上下文是我第一次看到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会议的发言人向我们展示了一些依赖图...... 他指出的一个气味就是寻找与代码库不同功能部分有关系的东西。这些可能会破坏封装。
另外,我会看一下每个部分的一般复杂性......那些遍布各个部分的人都是嫌疑人。
不隶属于 StackOverflow