5

Laravel アプリケーションでボブおじさんのクリーン アーキテクチャを適用しようとしています。

私が懸念しているのは、ボブおじさんが説明しているように、コントローラーは3番目のサークルであるインターフェイスアダプター(インサイドアウトから)に属している必要があることです。これは、コントローラーがユース ケース サークル (2 番目) のみに依存し、4 番目のサークルのフレームワークについて何も認識しないことを意味します。

ただし、一部のフレームワークのコントローラーは、基本クラス (たとえば、AbstractController クラス) を拡張する必要があります。また、Request オブジェクトを受信し、場合によっては Response オブジェクトを返す必要があるため、これはクリーン アーキテクチャの依存関係ルールを破るものです。外側の円のフレームワーク。

私は誤解していますか?そうでない場合、依存関係のルールを破らない解決策はありますか?

私のコントローラーは次のようになっています。

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,
        ];
    }
}
4

2 に答える 2

1

AbstractController第三 サークルに 属 し て います . したがって、依存関係を壊すことはありません。また、 3 番目のサークルにデータを送信するためのユース ケース サークルにデータ転送オブジェクト (DTO)がある場合は、依存関係を壊すことはありません。

これを実現するには、すべての要求と応答に対して DTO を作成し、エンティティを DTO にマップし、エンティティの代わりに DTO を共有する必要があります。

例:Userという名前の文字列変数を持つエンティティがありますNameuse-casesサークルからユーザーを取得するコントローラーがあります。

解決策: 文字列変数で名前を付けた DTO を作成しUserDtoます (名前を付けることができますName)。コントローラーは知っているUserDtoが、知らないUser entity

于 2016-11-30T10:29:01.907 に答える