如何命名纯虚拟保护属性

时间:2009-04-23 11:53:06

标签: c# .net properties naming-conventions

前言

我有一个组件,我们称之为IView。该组件由BaseView类实现,该类具有大部分功能。我们正在使用模板模式将逻辑委托给inheretting类。

问题:

我们有一个名为IView.Visible的属性,它指示组件是否应该可见。此属性不是虚拟,因为它涉及我们的BaseView中的一些逻辑。

我们创建了一个虚拟保护方法 IsVisible ,它从BaseView.Visible调用,以决定IView.Visible的最终值。

我们认为此属性名称IsVisible对于派生类的实现者来说不具有描述性和清晰性。

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

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


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

5 个答案:

答案 0 :(得分:1)

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

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

internal virtual bool CanSelectCore()
{
    ...
}

我对这个解决方案的关注是你暴露了一个未知复杂性的方法,可能有副作用作为属性,但是因为你可以翻阅.NET框架代码并看到如果你正在寻找这个约定很常见对于一个标准,这可能会尽可能接近。

答案 1 :(得分:0)

这个问题没有“正确”或“错误”,只有“更好”或“更差”。

就个人而言,我会让属性“涉及一些逻辑”一个方法GetVisible(),以明确有一些逻辑(即使它很简单,它也可以是属性)。

持有信息的财产可能只是可见。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

为了一次又一次地编码,命名不应该太大,并且IsVisible也是标准的命名方式。它也应该属于正确的英语。 ShouldBeVisible听起来像某种条件/验证,而不是财产。

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

答案 4 :(得分:0)

由于正在考虑的方法是Visible的继承类的实现,如果必须的话,我会使用可怕的丑陋但非常具有描述性的名称VisibleImplementation或VisibleImpl。开发人员非常清楚,这是他实现逻辑以使组件可见或不可见的地方。

 protected bool VisibleImplementation()  { ... }

或者,您可以为其命名为Visible,并要求它采用布尔参数,指示是否从基础实现调用它。就个人而言,我不喜欢引入一个参数来区分方法,但有时你必须妥协。

 protected bool Visible( boolean fromBase ) { ... }