首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >独立的getter/setter方法,还是组合的?

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

Stack Overflow用户
提问于 2011-07-13 14:13:50
回答 5查看 2.9K关注 0票数 19

当我在一个项目中工作时,我一直在做一些修改,浏览现有的框架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;
}

除了减少给定类的方法数量之外,这样做(前者)有什么价值吗?我一直认为方法(一般的函数)应该更好地描述一个动作。当其他有经验的开发人员看到这一点时,他们会不会感到害怕,甚至是一点点?

我只是惊讶地看到一个流行的框架使用了这样的约定(当然我还没有使用Kohana )

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-07-13 16:07:06

我认为这种做法很糟糕,因为它违反了CommandQuerySeparation。设置一个值就是改变状态(命令)。获取一个值就是询问状态(Query)。一个方法不应该同时做两件事,而应该只做一件事。

此外,当一个方法只被称为用户名时,它的作用也不是很明显,例如,它没有动词,比如get或set。在您的示例中,情况会更糟,因为返回值要么是对象本身,要么是属性值,因此不一致。

此外,getters (and setters) should be used sparingly,因为他们将很快卷积您的应用程序接口。你拥有的getter和setter越多,该对象的合作者就需要更多关于该对象的知识。如果您发现您的对象询问其他对象有关其内部结构的信息,那么很可能您把责任放错了地方。

票数 9
EN

Stack Overflow用户

发布于 2011-07-13 14:26:51

jQuery和Kohana走的是一样的路。然而,我认为为and和and创建单独的方法会更好。方法的作用更明显,我认为它在ide中的代码编译中更实用。例如,输入set,就会得到可以设置的所有属性的列表。

另一个缺点是:如果您想真正将一个值设置为null,该怎么办?这不会起作用,因为null是返回值的标识符,您在设置特定值时受到限制……

所以这很好,因为你将不得不写得更少,但是嘿,在你的方法前面的三个字母(set/get)是什么?

票数 3
EN

Stack Overflow用户

发布于 2011-07-13 14:58:38

尽管Kohana在OOP中使用了这种不同寻常的技术,但我认为您应该首先遵循编码约定。但当然,最好对类中的每个属性使用单独的getter和setter。因此,如果有可能使用它们而不打破常规--只要这样做,你就不会错;)。如果你对使用一些OOP技术有疑问,你也可以在这里读到PHP http://www.ibm.com/developerworks/opensource/library/os-php-7oohabits/中的好习惯。希望它能有所帮助:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6674784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档