gpt4 book ai didi

整洁架构中的 Controller

转载 作者:行者123 更新时间:2023-12-04 03:16:01 28 4
gpt4 key购买 nike

我正在尝试申请 Clean Architecture来自 Laravel 应用程序中的 Bob 叔叔。

我所关心的是:正如鲍勃叔叔所描述的, Controller 应该属于第三圈:Interface Adapters (由内而外)。这意味着 Controller 只依赖于 Use Case Circle (2nd),而不应该知道关于 4th circle 中的框架的任何信息。

但是有些框架中的controller需要扩展一个基类(比如一个AbstractController类),它还需要接收一个Request对象,有时还需要返回一个Response对象,所以这个有点打破依赖规则 Clean Architecture,因为它知道外圈中的框架。

我误解了吗?如果没有,是否有任何不破坏的解决方案依赖规则 ?

我的 Controller 看起来像这样:

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use User\UseCase\FetchUsers;
use User\UseCase\FetchUsersRequest;

class UserController extends Controller
{
public function index(Request $request, FetchUsers $fetchUsersUseCase)
{
$useCaseRequest = new FetchUsersRequest(
// extract data from Request
);

$useCaseResponse = $fetchUsersUseCase->handle($useCaseRequest);

return [
'users' => $useCaseResponse->users,
];
}
}

最佳答案

AbstractController属于第三圈 .所以你不会破坏任何依赖。如果您有 数据传输对象(DTO) 用例圈用于传输数据到第三圈你不会破坏任何依赖。

为了实现这一点,您应该为所有请求和响应创建 DTO,将您的实体映射到 DTO 并共享 DTO 而不是实体。

例如:您有一个 User具有名为 Name 的字符串变量的实体.您有一个 Controller 将从 use-cases 中获取用户。圆圈。

解决方案:创建一个名为 UserDto 的 DTO带有字符串变量(您可以将其称为 Name )。 Controller 知道 UserDto但不是 User entity

关于整洁架构中的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40885732/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com