我的一些PHP域对象具有应该从对象外部设置的属性,但仅限于某些客户端对象。我该如何执行此操作?
我在课堂上使用setter,并且我可以找到一种方法来区分不同的调用者,我确信我可以在setter中进行一些检查。这看起来有点令人费解。我觉得我违反了OO设计原则(也许是“告诉,不要问”)。
我想这是一个相当常见的情况。我错过了什么?
答案 0 :(得分:0)
在这种情况下,这对我来说是一个糟糕的设计。你违反了班级的单一责任原则。相反,将您的代码重构为多个类,但使用组合来附加可选属性。
例如:
class MyDataObject {
private $main_property;
private $extended_property;
/* ... getters/setters for $main_property. */
public function set_extended_property(IExtendedProperty $property) {
$this->extended_property = $property;
}
}
其中IExtendedProperty
是自定义属性数据的接口。