如果您遵循 MVC 设计模式,那么实例没有理由位于控制器中。User
它应该是模型层的一部分,而不是泄漏到表示层。
看起来你所说的“控制器”实际上更像是一种服务,它应该是模型层的一部分,它处理数据存储相关结构(映射器、存储库、DAO)上域对象之间的交互。
基本上,您缺少的是正确的关注点分离。
控制器应该只是将数据传递给识别或一些用户管理服务,而不是处理域业务逻辑。所述服务应该初始化User
对象、验证数据并尝试保存它。控制器不应该知道这些。
像这样的东西:
class SomeController
{
// ---- snip ----
public function postRegister( $request )
{
$accounts = $this->serviceFactory->create('AccountManagement');
$account->create( $request->getPost('username'),
$request->getPost('email'),
$request->getPost('password'),
$request->getPost('password2') );
$this->view->setState( View::STATE_POST );
}
// ---- snip ----
}
class AccountManagement extends Service
{
// ---- snip ----
public function addUser( $username, $email, $password, $repeated_password )
{
$user = $this->domainObjectFactory->create( 'User' );
$user->setNickname( $username );
$user->setEmail( $email );
$user->setPassword( $password );
$user->matchRepeatedPassword( $repeated_password );
if ( $user->isValid() )
{
$dao = $this->DAOFactory->create( 'User' );
$dao->save( $user );
}
// additional code for saving the error state
// if domain object turns out to be invalid
// or DAO returns an error
}
// ---- snip ----
}
PS你可能会发现这篇文章相关。