如何在laravel中实现单一责任



我对如何在Laravel控制器中实现和遵循SRP(单一责任原则(感到困惑。

假设我们有一个控制器,我们必须做这些事情:

例如

public function StorePost() {
// check user login()
//check number of current user Post count =>which must be less than 10
//store post
//send an email to user which your post has saved
//return =>api:json /web : redirect
}

我知道我可以在存储库中实现一些DB查询,但我不知道如何实现其他逻辑代码来实现SRP

此外,我知道有一个海曼方案可以实现这些目标,但我想自己实施它。

SRP在这种情况下,基本上意味着每个类和方法应该只负责一个行为/功能。经验法则是,一个类或方法应该只因一个原因而更改,如果它因多个原因更改,则需要将其分解为更小的部分。

  • 您的storePost方法不应该检查用户登录,这应该在调用storePost之前在其他地方处理。如果身份验证机制发生变化,比如从api令牌切换到json-web令牌或其他什么,则storePost不应该发生变化。Laravel通过auth中间件在中间件级别实现了这一点
  • 检查用户帖子计数,这可以在验证阶段进行检查。如果我们添加更多的验证逻辑,storePost不应该改变。在Laravel中,您可以使用FormValidation
  • 对于存储post,控制器不需要知道如何调用DB,您可以使用模型类使用活动记录样式,或者如果您的用例需要,可以创建一个服务或存储库类。如果我们决定像NoSQL那样改变DB供应商,storePost就不应该改变
  • 对于发送电子邮件,同样,控制器不需要知道如何发送电子邮件,比如主题/正文收件人是什么。如果我们需要更改电子邮件布局,storePost不应该更改。Laravel有Notification
  • 为了将响应序列化为json,控制器不需要知道如何格式化响应。如果我们决定更新json的外观,storePost不应该改变。Laravel对此有API Resource

因此,在本例中,控制器方法的职责基本上是将所有这些粘合在一起。它基本上做你写下的事情,它只负责维护一步一步的行为,其他一切都委托给别人。如果行为发生变化,比如添加新的行为,比如通知所有追随者,storePost就会发生变化。

相关内容

  • 没有找到相关文章

最新更新