前回のトランザクションスクリプトパターンの反省から
今回はいわゆるドメインモデルの具体例に関して。
ドメイン駆動型設計には以下のような特徴があります。
大きく、アプリケーションの構成を以下のように分けます。
主な構成
ルーティング
URLとコントローラの橋渡し
コントーラー
URLからビューまでの橋渡し
サービス
一連のビジネスロジックの記述部分
リポジトリ
DB(エンティティ)とのやりとりなど
エンティティ
DBをオブジェクトに置き換えたものです。
ビュー
実際のHTML部分
のように分けるのが一般的です。
個人的に上記のような形で処理を書いて見ましたが、
- 細かい仕様変更があった場合に上位(例えばコントローラー)の修正を必要としなくなる
- 規模によってはサービスとリポジトリを分ける必要がないかも
- 単純な検索プラスCSV出力などの機能を言われた時に下位(サービス以下)の処理を使い回すことができる
- テストがしやすい
などのメリットが多々あります。
参考文献
PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 (日本語)
Laravelアーキテクチャ 3 アプリケーションアーキテクチャ
参考URL