【问题标题】:NDepend query to consider the getter and setter for a property as one single methodNDepend 查询将属性的 getter 和 setter 视为一种方法
【发布时间】:2014-05-20 08:17:51
【问题描述】:

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

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

问题是即使我们在一个类中有 10 个属性,在定义的限制内,方法的数量显示为 20。我知道这是因为单个属性的 get_ 和 set_ 被计算在内作为两种不同的方法。但是有什么方法可以改变 NDepend 查询,让属性的 get_ 和 set_ 方法算作一个方法?

谢谢

【问题讨论】:

    标签: ndepend


    【解决方案1】:

    这是一个 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 的用户语音有需求,这将使此类规则更易于开发,请不要犹豫,为这个投票!

    【讨论】:

    • 谢谢,效果很好。我还投票支持创建 IProperty 接口。
    猜你喜欢
    • 2020-07-28
    • 2012-09-16
    • 2021-07-12
    • 2019-05-09
    • 2019-01-22
    • 1970-01-01
    • 2011-04-14
    • 2017-09-09
    • 2018-11-08
    相关资源
    最近更新 更多