Clean Architecture sample with Laravel
Laravel で実践クリーンアーキテクチャの形に組んでみました。
詳しい解説は下記解説をご覧ください。
Laravelで実践クリーンアーキテクチャ: https://qiita.com/nrslib/items/aa49d10dd2bcb3110f22
また次の記事もあわせていただくと参考になるでしょう。
実践クリーンアーキテクチャ: https://nrslib.com/clean-architecture/
実装クリーンアーキテクチャ: https://qiita.com/nrslib/items/a5f902c4defc83bd46b8
どの実装が図におけるどれにあたるかを書いておきます。
いつもの図です。
- App\Http\Controllers\UserController
- packages\UseCase\User\Create\UserCreateUseCaseInterface
- packages\UseCase\User\GetList\UserGetUseCaseInterface
- packages\Domain\Application\User\UserCreateInteractor
- packages\Domain\Application\User\UserGetListInteractor
- packages\MockInteractor\User\MockUserCreateInteractor
- packages\MockInteractor\User\MockUserGetInteractor
- packages\Domain\Domain 以下
MVC フレームワークにおいては相性が悪いので採用していません。
ただ Laravel では再現できる方法があるという情報を聞いているので調査後実装予定です。
- packages\Domain\Domain\User\UserRepositoryInterface
- packages\Infrastructure\User\UserRepository
- packages\InMemoryInfrastructure\User\InMemoryUserRepository
Interface と Adapter です。
案外わかりやすい右下の図です。
- App\Http\Controllers\UserController
通常の MVC フレームワークのコントローラです。
ヘキサゴナルアーキテクチャのアダプタにあたります。
- packages\UseCase\User\Create\UserCreateUseCaseInterface
- packages\UseCase\User\GetList\UserGetUseCaseInterface
- packages\Domain\Application\User\UserCreateInteractor
- packages\Domain\Application\User\UserGetListInteractor
- packages\MockInteractor\User\MockUserCreateInteractor
- packages\MockInteractor\User\MockUserGetInteractor
このプロジェクトでは採用していません
UseCaseOutputPort を採用したプロジェクトは次の URL をどうぞ!
https://github.com/nrslib/StrictLaraClean
このプロジェクトでは採用していません
Presenter を採用したプロジェクトは次の URL をどうぞ!
https://github.com/nrslib/StrictLaraClean
左上から書いていきます。
- App\Http\Controllers\UserController
- packages\UseCase\User\Create\UserCreateRequest
- packages\UseCase\User\GetList\UserGetRequest
- packages\UseCase\User\Create\UserCreateUseCaseInterface
- packages\UseCase\User\GetList\UserGetUseCaseInterface
- packages\Domain\Application\User\UserCreateInteractor
- packages\Domain\Application\User\UserGetListInteractor
- packages\MockInteractor\User\MockUserCreateInteractor
- packages\MockInteractor\User\MockUserGetInteractor
- packages\Domain\Domain 以下
- packages\Domain\Domain\User\UserRepositoryInterface
- packages\UseCase\User\Create\UserCreateResponse
- packages\UseCase\User\GetList\UserGetResponse
このプロジェクトでは採用していません
OutputBoundary を採用したプロジェクトは次の URL をどうぞ!
https://github.com/nrslib/StrictLaraClean
このプロジェクトでは採用していません
Presenter を採用したプロジェクトは次の URL をどうぞ!
https://github.com/nrslib/StrictLaraClean
- App\Http\Models 以下