复杂任务的依赖注入
Dependency Injection for complex tasks
在过去的几周里,我阅读了很多关于依赖注入、反转、技术、IoC 等等的内容……虽然我理解了其中的原理,但到目前为止我还没有得到一些东西。
假设我们有一个必须订阅某些服务的控制器。我们需要的是:
- 验证请求(月、年、计划)
- 添加对数据库的订阅
- 将账单发票添加到数据库(付款信息)
- 更新用户以指定他已订阅
- 处理付款
- 向用户显示信息并重定向到成功页面
这是一项复杂的任务,如果我们必须遵循 Skinny Controller 和 Fat Model,那将很难。许多开发人员还表示,如果你有超过 4 个依赖项,你必须简化你的类并遵循一个责任原则。这给我带来了很多问题。
- 我该如何继续?
- 如何隔离控制器?
- 我如何使它全部可测试?
- 如何传递 controller/classes 中的所有依赖项?
您可以使用基于命令的 Laracasts/Commander 让您的工作更轻松。
另请查看 Jeffrey Way Commander (https://laracasts.com/search?q=commander&q-where=lessons)。
您的控制器将如下所示:
- 获取输入
- 调用验证器
- Call
$this->execute(New SubscribeUserCommand($email, $data1, $data2))
调用 SubsribeUserCommandHandler handle 方法。命令是一个简单的数据对象,包含 handle 方法所需的一切。
- 在命令处理程序中调用任何其他命令来处理您的请求
- 查看命令处理程序的结果并向用户显示所需的数据。
Commander 还强烈建议您使用事件来触发电子邮件或通知...
上升:
- 控制器中的依赖项很少,
- 可读控制器
- 分别测试每个命令
向下:
- 设置它需要更多 类 和报价
希望这对您有所帮助,或者至少让您了解如何解决您的问题。我在我的项目中使用这种方法,用户注册,接收欢迎电子邮件,角色...我的控制器大约有 5 行,其余的在命令和命令处理程序中
在过去的几周里,我阅读了很多关于依赖注入、反转、技术、IoC 等等的内容……虽然我理解了其中的原理,但到目前为止我还没有得到一些东西。
假设我们有一个必须订阅某些服务的控制器。我们需要的是:
- 验证请求(月、年、计划)
- 添加对数据库的订阅
- 将账单发票添加到数据库(付款信息)
- 更新用户以指定他已订阅
- 处理付款
- 向用户显示信息并重定向到成功页面
这是一项复杂的任务,如果我们必须遵循 Skinny Controller 和 Fat Model,那将很难。许多开发人员还表示,如果你有超过 4 个依赖项,你必须简化你的类并遵循一个责任原则。这给我带来了很多问题。
- 我该如何继续?
- 如何隔离控制器?
- 我如何使它全部可测试?
- 如何传递 controller/classes 中的所有依赖项?
您可以使用基于命令的 Laracasts/Commander 让您的工作更轻松。
另请查看 Jeffrey Way Commander (https://laracasts.com/search?q=commander&q-where=lessons)。
您的控制器将如下所示:
- 获取输入
- 调用验证器
- Call
$this->execute(New SubscribeUserCommand($email, $data1, $data2))
调用 SubsribeUserCommandHandler handle 方法。命令是一个简单的数据对象,包含 handle 方法所需的一切。 - 在命令处理程序中调用任何其他命令来处理您的请求
- 查看命令处理程序的结果并向用户显示所需的数据。
Commander 还强烈建议您使用事件来触发电子邮件或通知...
上升:
- 控制器中的依赖项很少,
- 可读控制器
- 分别测试每个命令
向下: - 设置它需要更多 类 和报价
希望这对您有所帮助,或者至少让您了解如何解决您的问题。我在我的项目中使用这种方法,用户注册,接收欢迎电子邮件,角色...我的控制器大约有 5 行,其余的在命令和命令处理程序中