Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Latest commit 1d3588b Mar 17, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
image add lower right image Mar 13, 2019
src
README.MD Update README.MD Mar 15, 2019

README.MD

LaraClean

Clean Architecture sample with Laravel

Laravel で実践クリーンアーキテクチャの形に組んでみました。
詳しい解説は下記解説をご覧ください。
Laravelで実践クリーンアーキテクチャ: https://qiita.com/nrslib/items/aa49d10dd2bcb3110f22

また次の記事もあわせていただくと参考になるでしょう。
実践クリーンアーキテクチャ: https://nrslib.com/clean-architecture/
実装クリーンアーキテクチャ: https://qiita.com/nrslib/items/a5f902c4defc83bd46b8

どれがどれにあたるか

どの実装が図におけるどれにあたるかを書いておきます。

同心円

いつもの

いつもの図です。

Controllers

  • App\Http\Controllers\UserController

UseCases

  • 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

Entities

  • packages\Domain\Domain 以下

Presenters

  • App\Http\Presenters\User\UserCreatePresenter
  • App\Http\Presenters\User\UserGetListPresenter
  • packages\UseCase\User\Create\UserCreatePresenterInterface
  • packages\UseCase\User\GetList\UserGetListPresenterInterface

Gateways

  • packages\Domain\Domain\User\UserRepositoryInterface
  • packages\Infrastructure\User\UserRepository
  • packages\InMemoryInfrastructure\User\InMemoryUserRepository

Interface と Adapter です。

同心円の図の右下

右下の図

案外わかりやすい右下の図です。

Controller

  • App\Http\Controllers\UserController

通常の MVC フレームワークのコントローラです。
ヘキサゴナルアーキテクチャのアダプタにあたります。

UseCaseInputPort

  • packages\UseCase\User\Create\UserCreateUseCaseInterface
  • packages\UseCase\User\GetList\UserGetUseCaseInterface

UseCaseInteractor

  • packages\Domain\Application\User\UserCreateInteractor
  • packages\Domain\Application\User\UserGetListInteractor
  • packages\MockInteractor\User\MockUserCreateInteractor
  • packages\MockInteractor\User\MockUserGetInteractor

UseCaseOutputPort

  • packages\UseCase\User\Create\UserCreatePresenterInterface
  • packages\UseCase\User\GetList\UserGetListPresenterInterface

Presenter

  • App\Http\Presenters\User\UserCreatePresenter
  • App\Http\Presenters\User\UserGetListPresenter

クラス図

クラス図みたいなの

左上から書いていきます。

Controller

  • App\Http\Controllers\UserController

InputData

  • packages\UseCase\User\Create\UserCreateRequest
  • packages\UseCase\User\GetList\UserGetRequest

InputBoundary

  • packages\UseCase\User\Create\UserCreateUseCaseInterface
  • packages\UseCase\User\GetList\UserGetUseCaseInterface

UseCaseInteractor

  • packages\Domain\Application\User\UserCreateInteractor
  • packages\Domain\Application\User\UserGetListInteractor
  • packages\MockInteractor\User\MockUserCreateInteractor
  • packages\MockInteractor\User\MockUserGetInteractor

Entities

  • packages\Domain\Domain 以下

DataAccessInterface

  • packages\Domain\Domain\User\UserRepositoryInterface

OutputData

  • packages\UseCase\User\Create\UserCreateResponse
  • packages\UseCase\User\GetList\UserGetResponse

OutputBoundary

  • packages\UseCase\User\Create\UserCreatePresenterInterface
  • packages\UseCase\User\GetList\UserGetListPresenterInterface

Presenter

  • App\Http\Presenters\User\UserCreatePresenter
  • App\Http\Presenters\User\UserGetListPresenter

ViewModel

  • App\Http\Models 以下
You can’t perform that action at this time.