代码之家  ›  专栏  ›  技术社区  ›  Alex Shnayder

如何命名纯虚拟保护属性

  •  0
  • Alex Shnayder  · 技术社区  · 17 年前

    前言:

    我有一个组件,我们称之为iView。这个组件是由持有它大部分功能的baseview类实现的。我们正在使用模板模式将逻辑委托给固有类。

    问题:

    我们有一个名为iview.visible的属性,它指示组件是否应该可见。此属性是 非虚 因为它在我们的基础视图中涉及到一些逻辑。

    我们创建了一个虚拟保护方法 可看见的 从baseview.visible调用,以确定iview.visible的最终值。

    我们认为这个属性名是可见的,对于派生类的实现者来说,它没有足够的描述性和清晰性。

    有人建议将其重命名为shouldbevisable,但我们仍然认为有更好的名称。

    你怎么认为?你有更好的名字吗?是否有一个好的命名约定涵盖了模板方法的这个主题?


    更新: 为了澄清一点,可见和可见属性对组件没有副作用,可见属性使用is visible中的值来决定可见的值是否应该是真的,但它不是唯一的考虑因素,并且将组件的其他内部状态结合起来给出最终结论。

    5 回复  |  直到 17 年前
        1
  •  1
  •   Martin Harris    17 年前

    我从来没有特别热衷于这个命名约定,但是 Framework Design Guidelines 书中建议使用“core”作为这种模式的后缀。此代码取自Microsoft System.Windows.Forms.Control类

    public bool CanSelect
    {
        get
        {
            return this.CanSelectCore();
        }
    }
    
    internal virtual bool CanSelectCore()
    {
        ...
    }
    

    我对这个解决方案的担心是,您将公开一个具有未知复杂性的方法,并将可能产生的副作用作为一个属性,但是由于您可以仔细浏览.NET框架代码,并看到如果您正在寻找一个标准,那么经常使用这个约定,这可能是您所能得到的最接近的。

        2
  •  0
  •   Stefan Steinegger    17 年前

    这个问题没有“对”或“错”,只有“好”或“坏”。

    就我个人而言,我会将“涉及某些逻辑”的属性设置为getVisible()方法,以明确表示存在某些逻辑(即使它很简单,也可能是属性)。

    包含信息的属性可能只是可见的。

    这就像理解不同的成员一样:属性是数据(或数据的幻象),方法是逻辑的。

        3
  •  0
  •   Lazarus    17 年前

    基类是实现该属性还是打算由继承类实现,即它是抽象的?我的第一个想法是应该像在继承类中那样命名它。如果它控制类输出是否可见,那么visible似乎是正确的名称。至少在我看来,这个名称不应该反映实现,而应该反映目标。

        4
  •  0
  •   Akash Kava    17 年前

    我认为“虚拟保护”的目的已经足够了,它已经指定了它可以并且将在某个时候被覆盖,并由子类访问它。

    命名不应该太大,以便一次又一次地编码,而且也是可见的是标准的命名方式。它也应该属于正确的英语。听起来应该是某种条件/验证,而不是属性。

    成员的名称应该只描述目的,而不是逻辑或太技术细节,这只会使名称变得越来越大。

        5
  •  0
  •   tvanfosson    17 年前

    因为正在考虑的方法是Visible的继承类实现,所以如果必须的话,我将使用非常难看但描述性很强的名称、VisibleImplementation或VisibleImpl。这让开发人员非常清楚,这就是他实现使组件可见或不可见的逻辑的地方。

     protected bool VisibleImplementation()  { ... }
    

    或者,您可以给它一个可见的相同名称,并要求它接受一个布尔参数,指示是否从基本实现调用它。就我个人而言,我不喜欢引入一个参数来区分不同的方法,但有时你必须做出妥协。

     protected bool Visible( boolean fromBase ) { ... }
    
    推荐文章