2

堡首先让我更好地解释背景和问题。是否可以使用NDepend在OOP语言中查找类分区?

语境

我们有方法十几个大类;它违反了许多软件工程原理,并且这通过代码度量衡工具清晰可见。 看到内聚力差,方法太多等等。

enter image description here

问题 当我们试图将类分成更小的类与实例方法出现的问题。他们需要从类中访问一个或多个字段/属性,将所有访问特定字段/属性的方法放在一起可能会很有用。尝试使用Resharper→Refactor→Extract Class将一堆方法移动到新类时,问题清晰可见。 enter image description here

是否可以划分连接在一起的方法和字段(使用代码度量标准术语具有很高的内聚性)?

回答

2

当然,我们可以在这里做一些有趣的事情,但这需要一个分区算法,我不确定选择哪一个。

查询可能看起来像:

// Replace "NHibernate.Cfg.Configuration" with your "Namespace.TypeName" 
let type = Application.Types.WithFullName("NHibernate.Cfg.Configuration").Single() 
let dicoFields = type.Fields 
    .ToDictionary(f => f, f => f.MethodsUsingMe.Where(m => m.ParentType == f.ParentType)) 
let dicoMethods = type.Methods 
    .ToDictionary(m => m, m => m.FieldsUsed.Where(f => f.ParentType == m.ParentType)) 

// The partition algorithm on both dicos here 

from pair in dicoFields 
orderby pair.Value.Count() descending 
select new { pair.Key, pair.Value } 

//from pair in dicoMethods 
//orderby pair.Value.Count() descending 
//select new { pair.Key, pair.Value} 

这是否帮助前进?

NDepend field method partition algorithm

+0

是的,谢谢,我现在将从这一点着手,并请求数据科学部门进一步研究。 – Revious

+1

好极了,如果你想出很酷的公式,请更新回复 –

+0

当然,我在这里打开了这个问题(如果你看到不喜欢的东西,请随时纠正它):https://datascience.stackexchange。 COM /问题/ 22818 /这此结果的格式要求的换一个分区算法 – Revious

0

起价@Patrick从NDepend的团队答案我做了到达的一些理论和一些部分解决例如,某些进一步的调查。

这里可以看到其中alghoritm效果很好 http://sqlfiddle.com/#!17/51b0d/2

在这里,一个问题一个例子(应该有没有相同的元素): http://sqlfiddle.com/#!17/51b0d/7

要理解这部分的解决方案,您可以看herehere

Here你可以找到它的问题是整体的复杂性以及采取了哪些建议start fromhere另一个答案。

相关问题