NDepend查询将属性的getter和setter视为一个单一方法

时间:2014-05-20 08:17:51

标签: ndepend

我已点击链接Can I find number of methods without number of getters via CQL?并从我的一个NDepend查询中排除了属性。

我们的编码指南之一也是为了确保类中的属性数(包括自动属性)不超过10.(为了与另一个指南一致,可以为一个类定义不超过20个方法。)

问题是即使我们在一个类中有10个属性,它们在定义的限制内,方法的数量显示为20.我知道这是因为正在计算单个属性的get_和set_作为两种不同的方法。但有没有办法,我们可以通过它来更改NDepend查询,以便将属性的get_和set_方法计为单个方法?

由于

1 个答案:

答案 0 :(得分:0)

这是一个CQLinq规则,它警告具有10个以上属性的类型,并通过 getter 或(独占) setter 列出属性。精明之处在于使用Lookup表,其中getter和/或setter由属性名称索引,从getter / setter名称推断:

// <Name>A class should not have more than 10 properties</Name>
warnif count > 0 

from t in Application.Types

let accessers = t.Methods.Where(m => m.IsPropertyGetter || m.IsPropertySetter)
where accessers.Count() > 0 // Optimization!

// Here we build a lookup that associate for each property name, the getter, the setter, or both.
// The property name is getter and/or setter simple names, without "get_" or "set_" prefixes (4 chars).
let propertiesLookup  = accessers.ToLookup(a => a.SimpleName.Substring(4, a.SimpleName.Length -4))
where propertiesLookup.Count() > 10

let properties = propertiesLookup.Select(p => p.First())
select new { t, properties  }

此规则还列出了每个匹配类的属性。

NDepend CQLinq Rule

我们对creating an NDepend.CodeModel.IProperty interface的用户语音提出了要求,这将使这种规则更容易开发,不要犹豫为此投票!