我正在Zend Framework中开发一个应用程序,并具有以下层:控制器,服务,域模型和映射器。把php objectToArray逻辑放在哪里?哪一层?
我的域对象需要被表示为用于几个不同的目的阵列。例如,映射器在持久化之前将对象转换为数组;该表单需要一个数组作为其populate()
方法的参数;还有其他一些例子。
所以,我的问题是,在什么层我应该做翻译,以一个数组?对象的平移根据其使用的上下文而略有不同,例如,在持久化新对象时不需要对象ID,但在持续更新或填充表单时需要此对象ID。
据我所见,有两种选择。选项1是在每个组件(即映射器,表单等)中进行翻译。选项2将其放入域对象本身,并让客户端代码传递一个参数以确定它们需要的阵列变体,例如, $array = $domObject->toArray('populateForm');
选项1将涉及重复了相当数量,但似乎坚持关注规则的分离。选项2将避免重复,但我不确定我的域对象应该关心以各种不同的方式表示自己。
或许域对象应该只产生一个“香草”阵列,并且每个组件应该调整供自己使用?另一点与模式有关。我应该寻找应用装饰或其他模式?
您的想法非常感谢!