复杂任务的依赖注入

Dependency Injection for complex tasks

在过去的几周里,我阅读了很多关于依赖注入、反转、技术、IoC 等等的内容……虽然我理解了其中的原理,但到目前为止我还没有得到一些东西。

假设我们有一个必须订阅某些服务的控制器。我们需要的是:

  1. 验证请求(月、年、计划)
  2. 添加对数据库的订阅
  3. 将账单发票添加到数据库(付款信息)
  4. 更新用户以指定他已订阅
  5. 处理付款
  6. 向用户显示信息并重定向到成功页面

这是一项复杂的任务,如果我们必须遵循 Skinny Controller 和 Fat Model,那将很难。许多开发人员还表示,如果你有超过 4 个依赖项,你必须简化你的类并遵循一个责任原则。这给我带来了很多问题。

您可以使用基于命令的 Laracasts/Commander 让您的工作更轻松。

另请查看 Jeffrey Way Commander (https://laracasts.com/search?q=commander&q-where=lessons)。

您的控制器将如下所示:

  1. 获取输入
  2. 调用验证器
  3. Call $this->execute(New SubscribeUserCommand($email, $data1, $data2)) 调用 SubsribeUserCommandHandler handle 方法。命令是一个简单的数据对象,包含 handle 方法所需的一切。
  4. 在命令处理程序中调用任何其他命令来处理您的请求
  5. 查看命令处理程序的结果并向用户显示所需的数据。

Commander 还强烈建议您使用事件来触发电子邮件或通知...

上升:

  • 控制器中的依赖项很少,
  • 可读控制器
  • 分别测试每个命令

向下: - 设置它需要更多 类 和报价

希望这对您有所帮助,或者至少让您了解如何解决您的问题。我在我的项目中使用这种方法,用户注册,接收欢迎电子邮件,角色...我的控制器大约有 5 行,其余的在命令和命令处理程序中