我已点击链接Can I find number of methods without number of getters via CQL?并从我的一个NDepend查询中排除了属性。
我们的编码指南之一也是为了确保类中的属性数(包括自动属性)不超过10.(为了与另一个指南一致,可以为一个类定义不超过20个方法。)
问题是即使我们在一个类中有10个属性,它们在定义的限制内,方法的数量显示为20.我知道这是因为正在计算单个属性的get_和set_作为两种不同的方法。但有没有办法,我们可以通过它来更改NDepend查询,以便将属性的get_和set_方法计为单个方法?
由于
答案 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 }
此规则还列出了每个匹配类的属性。
我们对creating an NDepend.CodeModel.IProperty interface的用户语音提出了要求,这将使这种规则更容易开发,不要犹豫为此投票!