哪里放php objectToArray逻辑?哪一层?

时间:2012-09-20 05:03:19

标签: php design-patterns separation-of-concerns

我正在Zend Framework中开发一个应用程序,它具有以下层:控制器,服务,域模型和映射器。

我的域对象需要表示为几个不同用途的数组。例如,映射器在持久化之前将对象转换为数组;表单需要一个数组作为其populate()方法的参数;还有其他一些例子。

所以,我的问题是,我应该在哪一层进行数组转换?对象的翻译根据使用它的上下文而略有不同,例如,持久化新对象时不需要对象ID,但在持久更新或填充表单时需要该对象ID。

据我所知,有两种选择。选项1是在每个组件中进行翻译(即映射器,表单等)。选项2是将它放在域对象本身中,让客户端代码传递一个参数来确定它们需要哪个阵列变化,例如: $array = $domObject->toArray('populateForm');

备选方案1将涉及相当多的重复,但它似乎坚持关注分离规则。选项2可以避免重复,但我不确定我的域对象应该关注以各种不同的方式表示自己。

也许域对象应该只生成一个'vanilla'数组,并且每个组件都应该根据自己的需要进行定制?另一点涉及模式。我应该寻找应用装饰器还是其他模式?

非常感谢您的想法!

1 个答案:

答案 0 :(得分:1)

我对此的看法是第一位的,你认为你是以正确的方式做到这一点吗?没有任何关于该项目的真正知识,这听起来相当复杂。感觉就像你正在尝试做一个典型的解决方案,一个非常新的Zend会做的事情,然后意识到这是不必要的。然后我再也不知道你的项目了。

其次,我可能会将这些功能放在服务层中。我的服务层几乎总是关于操纵对象。