【发布时间】:2012-09-20 05:03:18
【问题描述】:
我正在 Zend Framework 中开发一个应用程序,它具有以下层:控制器、服务、域模型和映射器。
我的域对象需要被表示为用于几个不同目的的数组。例如,映射器在持久化对象之前将其转换为数组;该表单需要一个数组作为其populate() 方法的参数;还有一些其他的例子。
所以,我的问题是,我应该在哪一层进行数组的转换?对象的翻译根据使用它的上下文略有不同,例如持久化新对象时不需要对象 ID,但持久化更新或填充表单时需要对象 ID。
据我所知,有两种选择。选项 1 是在每个组件(即映射器、表单等)中进行翻译。选项 2 是将它放在域对象本身中,并让客户端代码传递一个参数来确定他们需要哪些数组变体,例如$array = $domObject->toArray('populateForm');
选项 1 会涉及大量重复,但它似乎遵守关注点分离规则。选项 2 可以避免重复,但我不确定我的域对象是否应该关注以各种不同的方式表示自己。
也许域对象应该只生成一个“香草”数组,并且每个组件都应该为自己的使用定制它?还有一点与模式有关。我应该应用装饰器还是其他模式?
非常感谢您的想法!
【问题讨论】:
标签: php design-patterns separation-of-concerns