Bug*_*rUK 3 php design-patterns slim
我利用有限的应用程序架构知识,使用 Slim3 和 PHP 启动了一个项目。计划是创建项目并分离应用程序问题。一切进展顺利,但随着应用程序的增长,事情变得越来越混乱。
这样做的整个想法是使开发更容易。在某种程度上确实如此,但我发现有时密切关注数据流很复杂。
我需要一些关于什么是存储库、服务和控制器/操作的建议。以及它们应该如何在系统中工作。我目前对它们的理解如下:
存储库
存储库用于服务层和模型层之间。例如,在 a 中,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) { ... }
}
Run Code Online (Sandbox Code Playgroud)
我在那里放了一些示例方法。但可能还有更多。
服务
服务层封装了应用逻辑。例如,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 (...) { ... }
}
Run Code Online (Sandbox Code Playgroud)
行动
我不确定这是否是一个真正的术语。它在 Slim Framework 文档中使用,似乎代表一个瘦控制器。
Action 包含很少的逻辑,用于调用服务。除非有正当理由,否则 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
]);
}
}
Run Code Online (Sandbox Code Playgroud)
我是否正确使用这些模式?我似乎采用的流程是这样的:
/create。该路由已注册到 Action。任何建议将不胜感激。
| 归档时间: |
|
| 查看次数: |
1934 次 |
| 最近记录: |