LaravelにおけるModelとControllerについて
こんにちは、清木です。
今日は、少し前までLaravelでの新規開発を行なっていたのでその時にすごく混乱したModelとControllerについて実際に自分が勘違いしていたことについて書いていきたいと思います。
ModelとControllerについての認識
さて、僕が認識していたModelとControllerの責務についてですが、
Modelにビジネスロジックや、DB操作を書き、Controllerをそこから呼び出すという程度の認識でした。
実際その方向で開発を進めるため、その旨を周知していたのですが、
Controllerにビジネスロジックを書かないとうまく処理できないという状況に陥ってしまいました。
実際には何を周知するべきだったのか、そのためにどんな仕組みを使うべきだったのか
LaravelでDBを操作する時に使用するのは、EloquentというORMが一般的だと思うのですが、EloquentはActiveRecordの実装を提供しています。
このまま何も考えずにEloquentのModelをを継承したModelに対してビジネスロジックを書いてもうまくいきません。
2つ以上のテーブルが関係するビジネスロジックがあった場合にどうしてもつまずいてしまうため、DDDにおけるService層を導入してビジネスロジックをService層に寄せ、Controllerからはビジネスロジックの呼び出しだけと制限するよう周知すべきでした。
こうすることによって、ModelやControllerがの処理がシンプルになり読みやすくなるはずです。
終わりに
フレームワークの特徴と、処理を書くべきクラスなどを正確に捉えて周知して行くことはすごく大切だと感じます。
使用するフレームワークをよく勉強せず適当にプログラムを組んでいくと、その後の保守やそのコードを読むであろう新人などに良くない影響を与えると思うので日頃から綺麗な設計で綺麗なコードを書くことを心がけていきたいです。
7