【发布时间】:2012-02-25 08:58:02
【问题描述】:
我正在重建一个我运行的提供潮汐表的网站。我正在使用 Zend 框架来做这件事,并试图使其尽可能面向对象。我一直在思考当访问者从某个位置请求潮汐表时会发生的流程/过程以及它如何返回。
我想出了 2 种不同“类型”的对象来帮助完成这个过程。第一个基本上是 Zend Framework 使用的 helper 对象。第二个是一个 data 对象(因为没有更好的词)来封装在助手之间传递的数据。这是我正在考虑的流程的粗略概念:
-
请求处理程序
- 接收来自站点控制器或 api 控制器的请求数组。
- 创建名为 QueryData 的“数据对象”并使用有关请求的所有信息填充它。
- 将 QueryData 对象传递给 LocationHandler。
- 返回从 LocationHandler 返回的 ResponseData 对象。
-
位置处理程序
- 从 RequestHandler 接收 QueryData 对象
- 查找位置并创建一个 LocationData 对象来存储它。
- 将 QueryData 和 LocationData 对象传递给不同的帮助器,例如返回特定数据的 TideHandler 或 WeatherHandler初始查询。
- 返回一个 ResponseData 对象数组,其中包含从每个特定帮助程序(TideHandler、WeatherHandler 等)返回给它的响应
-
潮汐处理程序
- 从 LocationHandler 接收 QueryData 和 LocationData 对象。
- 使用数据对象查找潮汐数据是否有效。创建一个 ResponseData 对象来存储它。
- 将 ResponseData 返回到 LocationHandler。
以这种方式做所有事情,我得到了一种“即插即用”的 OOP 方法,使我可以更轻松地添加到其中(我认为?)。很抱歉导致我的问题的冗长解释......
问题:
将数据集封装到一个对象(而不是数组)中以传递给其他对象,这些对象对其执行功能并发送新的/修改的对象,这是一种常见的做法吗?还有哪些其他解决方案或模式可以提供类似级别的功能和灵活性?
【问题讨论】:
-
在 PHP 中?如果您关心封装或类型检查,当然可以。但是,由于 PHP“数组”实际上是字典,因此传递 PODS 并不重要。
-
另外,我觉得 ZF 有点过度设计。 JMNSHO。 YMMV。
-
仅包含属性的对象会比等效设计的关联数组使用更多资源吗?或者它几乎相等......
-
资源使用情况确实不够担心。当你达到它产生影响的地步时,你正在处理的数据集太大了,PHP 无论如何都无法舒适地处理。
-
好的。因此,就将关注点分成不同的“处理程序”而言,通过它们传递数据并将返回值 waterfall 返回到原始请求点是一种不好的做法吗?
标签: php oop design-patterns object