首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用来自其他服务的存储库模式的Laravel调用服务

使用来自其他服务的存储库模式的Laravel调用服务
EN

Stack Overflow用户
提问于 2019-12-10 13:07:00
回答 1查看 1.4K关注 0票数 1

我在我的Laravel项目中使用了repository pattern

从其他服务调用服务的好模式是什么?

例如,服务将如下所示:

代码语言:javascript
运行
复制
class GetAllUsersService 
{
    private $userRepository; 

    public function __construct(UserRepository $repository)
    {
       $this->userRepository = $repository;
    }

    public function execute()
    {
       return $this->userRepository->getAll();
    }
}

现在,如果我想从应用程序的其他部分执行此服务,我将执行以下操作:

代码语言:javascript
运行
复制
class AnyClass
{
   public function executeUserService()
   {
      $repository = new UserEloquentRepository();

      $service = new GetAllUsersService($repository);

      return $service->execute();
   }
}

这是正确的做法吗?还有别的办法吗?也许一些UI层应该在这两者之间?

EN

Stack Overflow用户

回答已采纳

发布于 2019-12-10 14:41:28

我认为你有三种方法可以做到:

1)使用__construct()方法;

代码语言:javascript
运行
复制
class AnyClass
{
    private $get_all_users_service;

    public function __construct(GetAllUsersService $get_all_users_service) 
    {
        $this->get_all_users_service = $get_all_users_service;      
    }

    public function index()
    {
        $fetchAllUsers = $this->get_all_users_service->fetchAll();
    }
}

2)使用指定的服务,就像每个函数的一个参数需要使用它们:

代码语言:javascript
运行
复制
class AnyClass
{
    public function index(GetAllUsersService $get_all_users_service)
    {
        $fetchAllUsers = $get_all_users_service->fetchAll();
    }
}

3)像这样使用Laravel helper的方法app():

代码语言:javascript
运行
复制
class AnyClass
{
    public function index()
    {
        $get_all_users_service = app(GetAllUsersService::class);

        $fetchAllUsers = $get_all_users_service->fetchAll();
    }
}
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59260574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档