独立的getter/setter方法,还是组合的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

在进行项目时,我一直在对现有的框架API文档进行一些更改和浏览,以获得洞察力。

在仔细阅读Kohana文档时,我注意到任何给定类的getter/setter通常是组合在一起的:

public function someProperty($value = null){
    if(is_null($value){
        return $this->_someProperty;
    }
    $this->_someProperty = $value;
    return $this;
}

而不是:

public function setSomeProperty($value){
    $this->_someProperty = $value;
    return $this;
}

public function getSomeProperty(){
    return $this->_someProperty;
}

这样做有什么价值吗?

提问于
用户回答回答于

我认为这是不好的做法,因为它违反了CommandQuerySeparation。设置一个值正在改变状态(Command)。获取值是要求状态(查询)。一种方法不应该兼而有之,而只是一件事。

另外,当一个方法只是被称为用户名时,它并不是很明显,例如没有动词,比如get或set。在你的例子中,这会变得更糟,因为返回值是对象本身或属性值,所以它不一致。

而且,getters(和setters)应该谨慎使用,因为它们会快速地使你的API 变得复杂。你拥有的获得者和制定者越多,对象的合作者就需要更多关于对象的知识。

用户回答回答于

jQuery的方式与Kohana相同。但是,我认为最好创建单独的设置和获取方法。这个方法的作用更加明显,我认为它更实际地体现在ide中的代码完成中。例如,键入set你会得到一个你可以设置的所有属性的列表。

另一个缺点是:如果要将值真正设置为null是吗?这是行不通的,因为null是返回值的标识符,你在设置特定值时受到限制...

扫码关注云+社区