微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Laravel 中实现单一职责

如何解决如何在 Laravel 中实现单一职责

我对如何在 Laravel 控制器中实现以及如何遵循 SRP(单一职责原则)感到非常困惑。

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

例如

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    char str[20],str2[20];
    int length;
    cout<<"Enter the string\n";
    cin>>str;
    length=strlen(str);
    str2=strrev(str);
    if(str==str2)
    {
        cout<<"palindrome"; 
    }
    else{
        cout<<"Not a palindrome";
    }
    return 1;
}

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

另外,我知道有一个 heyman 包可以实现这些,但我想自己实现它。

解决方法

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

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

所以,最终在这个例子中,控制器方法的职责基本上是将所有这些粘合在一起。它基本上做你写下的,它只负责维护循序渐进的行为,其他一切都委托给别人。如果行为发生变化,例如添加新行为,例如通知所有关注者,storePost 将发生变化。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。