论坛首页 编程语言技术论坛

有关JAVA setter/getter、C# property的设计疑惑

浏览 3408 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-14   最后修改:2009-03-15
JAVA setter/getter与C# property孰优孰劣是个充满争论的问题,本贴不打算讨论它们之间的优缺点,只是把我在实际开发中遇到的设计疑惑列举一下:

1、getProperty() vs property()
在JAVA中,对于一般来说是只读、但是可能后期演变为可写的property来说,是命名为property()还是getProperty()?比如说如何命名Stack的top属性,可能的选择有两种:
class Stack {
    int size();
    void top();
}

class Stack {
    int size();
    void getTop();
}

需要更新栈顶的情形很少见,提供一个只读的top()就足够了,有些实现(如QT的QPtrStack)采用的是top()的风格,这样比较简洁,再说了,凭什么size没有被命名为getSize()。问题在于,一般来说栈顶是只读的、但是某些情况下还是需要对栈顶进行更新的,如果一开始贪图简洁的话,最后接口就变为:
class Stack {
    int size();
    void top();
    void setTop(value);
}

PS: 在我自己写的一个程序中,一开始读取top时采用的是top(),后来发现某些情况要更新top,所以就加上setTop,最后就出现了这个问题。

2、isActive() vs active() vs getActive()
如何命名bool类型的property,比如说:表示Connection是否活跃,是isActive() 还是active()还是getActive()?这三种命名各有优缺点,但是因为存在多种可能的getter/setter的命名方式,会造成不一致的命名风格。

3、在C#中,非名词性的empty、full是作为方法好还是属性好?
如果使用C#设计Stack,把名词性的size、capacity、top设计为属性,把它们看作是Stack的字段还是比较好理解的,但是把非名词性的empty、full也作为属性,个人感觉有些生搬硬套,当然纯属个人喜好,不知大家的看法如何?

   发表时间:2009-03-15   最后修改:2009-03-15
cscript 写道
JAVA setter/getter与C# property孰优孰劣是个充满争论的问题,本贴不打算讨论它们之间的优缺点,只是把我在实际开发中遇到的设计疑惑列举一下:

1、getProperty() vs property()
在JAVA中,对于一般来说是只读、但是可能后期演变为可写的property来说,是命名为property()还是getProperty()?比如说如何命名Stack的top属性,可能的选择有两种:
class Stack {
    int size();
    void top();
}

class Stack {
    int size();
    void getTop();
}

需要更新栈顶的情形很少见,提供一个只读的top()就足够了,有些实现(如QT的QPtrStack)采用的是top()的风格,这样比较简洁,再说了,凭什么size没有被命名为getSize()。问题在于,一般来说栈顶是只读的、但是某些情况下还是需要对栈顶进行更新的,如果一开始贪图简洁的话,最后接口就变为:
class Stack {
    int size();
    void top();
    void setTop(value);
}

PS: 在我自己写的一个程序中,一开始读取top时采用的是top(),后来发现某些情况要更新top,所以就加上setTop,最后就出现了这个问题。

2、isActive() vs active() vs getActive()
如何命名bool类型的property,比如说:表示Connection是否活跃,是isActive() 还是active()还是getActive()?这三种命名各有优缺点,但是因为存在多种可能的getter/setter的命名方式,会造成不一致的命名风格。

3、在C#中,非名词性的empty、full是作为方法好还是属性好?
如果使用C#设计Stack,把名词性的size、capacity、top设计为属性,把它们看作是Stack的字段还是比较好理解的,但是把非名词性的empty、full也作为属性,个人感觉有些生搬硬套,当然纯属个人喜好,不知大家的看法如何?



伪问题

C#中,top()
还是
top {set;get}
呢??
0 请登录后投票
   发表时间:2009-03-18   最后修改:2009-03-18
楼上提到的就不重复了
cscript 写道
3、在C#中,非名词性的empty、full是作为方法好还是属性好?
如果使用C#设计Stack,把名词性的size、capacity、top设计为属性,把它们看作是Stack的字段还是比较好理解的,但是把非名词性的empty、full也作为属性,个人感觉有些生搬硬套,当然纯属个人喜好,不知大家的看法如何?

可惜的就是C#的标识符规则还是比较传统的,不然如果能在属性名末尾写问号就方便很多,stack.Empty?之类的。.NET标准库里对这种bool类型的属性经常用IsXXX的形式命名,也不错,你看IList.IsReadOnly就是属性而不是方法。
0 请登录后投票
   发表时间:2009-03-18  
IsXXX是符合flow chart判断框的做法吧?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics