我使用有限的应用程序架构知识开始使用Slim3和PHP的项目。该计划是创建项目和单独的应用程序问题。一切进展顺利,但随着应用程序的增长,事情变得越来越混乱。
这样做的全部想法是使开发更容易。它在某种程度上确实存在,但我发现它有时很复杂,需要密切关注数据流。
我需要一些关于存储库,服务和控制器/操作的建议。以及他们应该如何在系统中工作。我目前对它们的理解如下:
存储库
在服务层和模型层之间使用存储库。例如,在UserRepository
中,您将创建包含要从数据库读取/写入的代码的方法。在PHP中,将在repo方法中使用PDO或ORM。例如:
class UserRepository
{
public function findByID($id) { ... }
public function findByEmail($email) { ... }
public function findByMobile($mobile) { ... }
public function createEmail($email, $firstname, $lastname, $password) { ... }
public function createMobile($mobile, $firstname, $lastname, $password) { ... }
}
我在那里放了一些示例方法。但可能会有更多。
服务
服务层封装了应用程序逻辑。例如,UserService
将负责创建帐户,并执行所需的逻辑以注册用户。服务也可以是第三方,例如为Facebook的SDK或ORM创建服务。
示例服务:
class UserService
{
public function createMobile($mobile, $firstname, $lastname, $password) {
/*
* Call a validation service to validate input
*/
...
/*
* Use UserRepository's findByMobile() to check if account exists
*/
...
/*
* Use UserRepository's createMobile() to create account
*/
...
/*
* Call SMS service to send verification code
*/
...
}
public function createEmail(...) { ... }
public function getFollowers (...) { ... }
}
操作
我不确定这是否是一个真正的术语。它在Slim Framework文档中使用,似乎代表了一个瘦控制器。
Action包含非常少的逻辑,用于调用服务。除非有正当理由,否则该动作很少会直接调用存储库。 Action将对服务返回的数据执行基本检查,以便将响应发送回客户端。
他们与个别路线相关联。我这样使用它们:
class ActivateEmailAction extends Action {
public function __invoke(Request $request, Response $response, $args = [])
{
if(!$this->ci->ActivationService->activateEmail($args['token'])){
return $response->withJson([
'status' => 'error',
'data' => null,
'message' => 'Invalid verification token'
]);
};
return $response->withJson([
'status' => 'success',
'data' => null,
'message' => null
]);
}
}
我是否正确使用这些模式?我似乎采用的流程是这样的:
/create
发出请求。该路线已注册为“行动”。非常感谢任何建议。
答案 0 :(得分:2)
我是否正确使用这些模式?
是的,你是。我给出的一般建议不是给你的课程一般,服务特别是太多的责任:遵循单一责任原则,这基本上说明了我的班级应该只有一个改变的理由" ( M.Fowler,据我记得实际上是R. Martin,感谢Gordon在评论中的更正)。
你的UserService
似乎处理了太多不同的任务:它处理注册和抓取粉丝。并可能发送短信。将与注册相关的逻辑提取到UserRegistrationService
类。
答案 1 :(得分:-3)
如果您对应用程序架构知之甚少,我建议您先阅读本书有关设计模式的内容:http://amzn.eu/aNVH8Ii
第二点是不要使用超薄框架。对于那些已经知道他们想要建立什么以及如何做的人来说,这是一个小框架。绝对不是学习任何模式或应用程序架构的框架。
我建议你看一下Yii 2:http://www.yiiframework.com/doc-2.0/guide-index.html
Yii使用大多数设计模式和架构解决方案,这些解决方案通常用于当今的大型应用程序,并且易于学习和理解。