Dan*_*ugg 18 php oop naming-conventions kohana getter-setter
在处理项目时,我一直在进行一些更改,并浏览现有的框架API文档以获得洞察力.
在仔细阅读Kohana文档时,我注意到任何给定类的getter/setter通常组合在一起:
public function someProperty($value = null){
if(is_null($value){
return $this->_someProperty;
}
$this->_someProperty = $value;
return $this;
}
Run Code Online (Sandbox Code Playgroud)
而不是:
public function setSomeProperty($value){
$this->_someProperty = $value;
return $this;
}
public function getSomeProperty(){
return $this->_someProperty;
}
Run Code Online (Sandbox Code Playgroud)
这样做(前者)是否有任何价值,除了减少给定类的方法数量?我总是在理解方法(一般的功能)应该更能描述一个动作.当他们看到这个时,其他有经验的开发人员是否会畏缩,甚至一点点?
我很惊讶地看到一个流行的框架使用这样的约定(我当然没有使用过Kohana)
我认为这是一种不好的做法,因为它违反了CommandQuerySeparation.设置值正在改变状态(命令).获取值是要求状态(查询).一种方法不应该同时做两件事,而应该只做一件事.
而且,当它被称为用户名时,方法的作用并不明显,例如,没有动词,如get或set.在您的示例中,这会变得更糟,因为返回值是对象本身或属性值,因此它不一致.
此外,应该谨慎使用吸气剂(和固定剂),因为它们会迅速使您的API回旋.您拥有的getter和setter越多,该对象的协作者就需要对对象的了解越多.如果你发现你的对象向其他对象询问他们的内部结构,那么你很可能错失了责任.
| 归档时间: |
|
| 查看次数: |
2644 次 |
| 最近记录: |