【发布时间】:2014-07-20 03:16:17
【问题描述】:
我正在使用教义 2 创建 symfony2 应用程序,我想就 DTO-Entity、Entity-DTO 转换的常见/良好做法征求意见。我找到了一些适用于所有语言和框架的信息,但没有找到适用于 SF2 的信息。
我想隔离实体,因此它们仅用于服务和 DAO(SF2 术语中的管理器、存储库)。控制器永远不会看到 DAO 或实体,只会通过服务与业务逻辑交互。服务和控制器之间的所有通信都应该通过原始类型、标量、DTO 完成。
例子:
控制器
class RegistrationController extends Controller
{
public function registerAction($name)
{
$userDTO = new UserDTO();
$form = $this->createForm(new UserType(), $userDTO);
$form->handleRequest($request);
if ($form->isValid()) {
$userService = $this->get('userService');
$userService->createUser($userDTO);
return $this->redirect($this->generateUrl('success'));
}
--//--
}
}
服务
class UserServiceImpl implements UserService
{
private $userDao;
public function __construct(UserDao $userDao)
{
$this->userDao = $userDao;
}
public function createUser(UserDTO $user)
{
$user = new User(); #doctrine entity
$user->setFirstName($userDTO->getFirstName());
$user->setLastName($userDTO->getLastName());
$this->userDao->persist($user);
$this->userDao->flush();
--//--
}
}
随着用户对象中属性数量的增加,问题很快就会出现。在我的应用程序中,用户有 13 个字段。是否有任何 SF2 工具(类)来简化此过程?您是否编写自己的转换器/变压器?您能否举例说明它的外观?梅比 PHP 魔术方法可以提供帮助吗?反射呢?
感谢您的建议和意见。
【问题讨论】:
标签: php symfony architecture doctrine-orm dto