2012-09-20 67 views
0

我正在Zend Framework中开发一个应用程序,并具有以下层:控制器,服务,域模型和映射器。把php objectToArray逻辑放在哪里?哪一层?

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

所以,我的问题是,在什么层我应该做翻译,以一个数组?对象的平移根据其使用的上下文而略有不同,例如,在持久化新对象时不需要对象ID,但在持续更新或填充表单时需要此对象ID。

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

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

或许域对象应该只产生一个“香草”阵列,并且每个组件应该调整供自己使用?另一点与模式有关。我应该寻找应用装饰或其他模式?

您的想法非常感谢!

回答

1

我对这个问题的想法是第一,你认为你在这做正确的方法是什么?没有任何有关该项目的真实知识,这听起来相当复杂。感觉就像你试图做一个典型的解决方案,一个Zend会很新的人会意识到这是不必要的。然后我再也不知道你的项目。

其次,我可能会在服务层把这样的功能。服务层对我来说几乎总是关于操纵对象。