0

为什么不是吸气剂?以及它如何与封装原理相结合?它安全吗?

更新: 是的,我大约Request。安全性:我的意思是代码中的任何人(通过使用监听器)都可以$request->attributes = null;

4

3 回答 3

1

如果你在谈论RequestResponse对象,几天前在 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 的框架的其他部分更加一致。但是,吸气剂可以与公共属性共存。

总而言之,我认为这种特殊情况是安全的。公共财产只应在似乎有益且正确的特殊情况下使用。

于 2011-05-03T00:07:30.220 回答
0

你是说Request对象吗?或者你在想什么属性?

如果您担心安全性,请查看安全组件,使用测试驱动开发,使用经过测试的库(不要发明自己的身份验证、密码学和相关解决方案)并进行代码审查。

于 2011-05-02T23:01:09.387 回答
0

封装已经封装的内容有什么意义?我的意思是-每个属性都是一个带有封装的 parameterBag 实例。

于 2013-03-13T09:53:32.247 回答