为什么不是吸气剂?以及它如何与封装原理相结合?它安全吗?
更新:
是的,我大约Request
。安全性:我的意思是代码中的任何人(通过使用监听器)都可以$request->attributes = null;
为什么不是吸气剂?以及它如何与封装原理相结合?它安全吗?
更新:
是的,我大约Request
。安全性:我的意思是代码中的任何人(通过使用监听器)都可以$request->attributes = null;
如果你在谈论Request和Response对象,几天前在 Symfony 开发者邮件列表上有一个关于这个的讨论。我邀请你在这里看看。
为什么不是吸气剂?不确定是否有明确的答案,但我认为这主要是基于个人品味的决定。
它会破坏封装吗?对于这种特殊情况,我并不认为。我的理由是,目前还没有对现在公开的各种对象执行特殊逻辑。所以最后,您最终会通过 getter 检索对象并直接读取或修改它。使用公共属性检索对象没有太大区别。
// With Getters
$parameterBag = $request->getQuery();
$parameterBag->get('key');
// With Public Properties
$parameterBag = $request->query;
$parameterBag->get('key');
当您需要确保属性具有特定值或格式时,应强制执行封装。例如,假设您有一个具有成本属性的类,并且该属性永远不应为负。因此,如果成本属性是公开的,则可以通过执行类似的操作将其设置为负值$receipt->cost = -1;
。但是,如果您将其设为私有并且该类的用户只能通过 setter 设置它,那么您可以通过在 setter 代码中进行一些特殊验证来确保成本永远不会低于 0。
在我们的例子中,我们谈论的是一个集合对象,准确地说是一个 ParameterBag 对象。我不认为对这个对象有特殊要求,但我可能是错的。所以对我来说,通过公共属性访问这些属性是正确的。
我可以看到支持 getter 的主要论点是,它与使用 getter 的框架的其他部分更加一致。但是,吸气剂可以与公共属性共存。
总而言之,我认为这种特殊情况是安全的。公共财产只应在似乎有益且正确的特殊情况下使用。
封装已经封装的内容有什么意义?我的意思是-每个属性都是一个带有封装的 parameterBag 实例。