Php 一个控制器和多个服务的设计模式
我目前在MVC中遇到以下问题,即正确的设计模式存在问题: 我有以下课程:Php 一个控制器和多个服务的设计模式,php,design-patterns,model-view-controller,solid-principles,Php,Design Patterns,Model View Controller,Solid Principles,我目前在MVC中遇到以下问题,即正确的设计模式存在问题: 我有以下课程: GroupController GroupService GroupUserController GroupUserService LogService (一个组可能有多个用户) 对于每个控制器,我都有CRUD,可供具有特定角色的用户使用。 其中一个功能是登录用户可以创建组(GroupService)。如果他这样做了,那么他必须被自动分配到用户组(GroupUserService)。我还需要将信息记录到
GroupController
GroupService
GroupUserController
GroupUserService
LogService
(一个组可能有多个用户)
对于每个控制器,我都有CRUD
,可供具有特定角色的用户使用。其中一个功能是登录用户可以创建组(
GroupService
)。如果他这样做了,那么他必须被自动分配到用户组(GroupUserService
)。我还需要将信息记录到LogService
用户创建组的时间和方式(通过CRUD
或通过仅适用于特定角色的方法)
目前我有这样的想法:
// GroupController.php
// Create new group
public function setAction()
{
//code...
if ($this->getRequest()->isPost()) {
$data = $this->request->getPost()->toArray();
$form->setData($data);
if ($form->isValid()) {
$data = $form->getData();
$result = $groupService->save($data, $data['id']);
// Add user to that group
if ($result) {
$groupUserData = [
'group' => $result->getId(),
'user' => $user->getId()
];
$result2 = $groupUserService->save($groupUserData); // <---- service which shouldn't be here?
if ($result2) {
// Some other action let's say with another service
}
$logData = [
'msg' => 'New Group created!',
'created_at' => new \DateTime()
];
$logService->save($logData); // <---- this service shouldn't be also here?
}
$this->redirect()->toRoute($this->route);
}
}
return $this->viewModel;
}
//GroupController.php
//创建新组
公共函数setAction()
{
//代码。。。
如果($this->getRequest()->isPost()){
$data=$this->request->getPost()->toArray();
$form->setData($data);
如果($form->isValid()){
$data=$form->getData();
$result=$groupService->save($data,$data['id']);
//将用户添加到该组
如果($结果){
$groupUserData=[
'group'=>$result->getId(),
'user'=>$user->getId()
];
$result2=$groupUserService->save($groupUserData);//“已创建新组!”,
'created_at'=>new\DateTime()
];
$logService->save($logData);//我认为可以使用facade模式,它旨在封装/隐藏某些过程的复杂性
因此,您可以创建一个包含一个方法的类,该方法保存您的所有操作逻辑,并且只需从操作中调用它
关于您的状态,我认为您可能还需要一个事务来包装您的查询。分层体系结构可能会有所帮助,尤其是六边形体系结构:
据我所知,沃恩·弗农(Vaughn Vernon)在下一本书中提供了最佳实用指南:
总体思路:表示逻辑(请求/表单处理)需要与应用程序逻辑(用例流逻辑)和域逻辑(创建和保存组用户数据)分离