我正在尝试在 Laravel 应用程序中应用 Bob 叔叔的Clean Architecture。
我关心的是:正如鲍勃叔叔所描述的,控制器应该属于第三个圈子:接口适配器(从内到外)。这意味着控制器仅依赖于用例圈(第 2 圈),并且不应该对第 4 圈中的框架一无所知。
但是有些框架中的控制器必须扩展一个基类(例如,一个 AbstractController 类),它还需要接收一个 Request 对象,有时还需要返回一个 Response 对象,所以这有点打破了Clean Architecture 的依赖规则,因为它知道外圈的框架。
我误解了吗?如果没有,是否有任何解决方案可以不破坏依赖规则?
我的控制器看起来像这样:
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,
];
}
}