我正在使用doctrine2创建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'));
}
--//--
}
}
Run Code Online (Sandbox Code Playgroud)
服务
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();
--//--
}
}
Run Code Online (Sandbox Code Playgroud)
随着User对象中属性数量的增加,问题很快出现.在我的应用程序中,用户有13个字段 是否有任何SF2工具(类)来简化此过程?你自己编写转换器/变压器吗?你能举例说明它应该是什么样的吗?Maby PHP魔术方法可以帮忙吗?反思怎么样?
感谢您的建议和意见.