我的一些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
是为自定义属性数据的接口。
嗨,Joshua,不知道你的意思。这里你在主类中使用了一个setter,这正是我目前正在做的。你不区分不同的来电者。任何客户都可以打电话给你的设定者...... –
判别来电者的问题是:你的班级不应该对他们的方法调用有什么看法。调用者使用自定义属性创建对象的新实例,或者将自定义数据注入类的实例(如上面的代码),而不是尝试过滤和控制方法调用。 – jmkeyes
我认为一个好的ACL也会帮助我。 –