我的一些 PHP 域对象具有应该从对象外部设置的属性,但只能由某些客户端对象设置。我该如何执行此操作?
我在课堂上使用 setter,如果我能找到一种方法来区分不同的调用者,我相信我可以在 setter 中做一些检查。不过,这似乎有点令人费解。我觉得我违反了 OO 设计原则(也许是“告诉,不要问”?)。
我想这是一个相当常见的场景。我错过了什么?
我的一些 PHP 域对象具有应该从对象外部设置的属性,但只能由某些客户端对象设置。我该如何执行此操作?
我在课堂上使用 setter,如果我能找到一种方法来区分不同的调用者,我相信我可以在 setter 中做一些检查。不过,这似乎有点令人费解。我觉得我违反了 OO 设计原则(也许是“告诉,不要问”?)。
我想这是一个相当常见的场景。我错过了什么?
在这种情况下,我觉得这是一个糟糕的设计。你会违反班级的单一职责原则。相反,将您的代码重构为多个类,但使用组合来附加可选属性。
例如:
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
自定义属性数据的接口在哪里。