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 以下
- App\Http\Presenters\User\UserCreatePresenter
- App\Http\Presenters\User\UserGetListPresenter
- packages\UseCase\User\Create\UserCreatePresenterInterface
- packages\UseCase\User\GetList\UserGetListPresenterInterface
- 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
- packages\UseCase\User\Create\UserCreatePresenterInterface
- packages\UseCase\User\GetList\UserGetListPresenterInterface
- App\Http\Presenters\User\UserCreatePresenter
- App\Http\Presenters\User\UserGetListPresenter
左上から書いていきます。
- 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
- packages\UseCase\User\Create\UserCreatePresenterInterface
- packages\UseCase\User\GetList\UserGetListPresenterInterface
- App\Http\Presenters\User\UserCreatePresenter
- App\Http\Presenters\User\UserGetListPresenter
- App\Http\Models 以下