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