アーキテクチャの話し

開発者、永遠のテーマであるアーキテクチャ。
自身ではMVCがシンプルで拡張性も高く好きです。

先日開催された「PHPカンファレンス福岡2015」で発表されたスライドを引用させてもらいます。

CakePHPを土台に作る事が多い+改修などでも出会う機会が増えてきました。
割りと制約が多い方に部類されるCakePHPでも、それぞれ特徴が出たり、ありがちなControllerにビジネスロジックがごっそり入っているパターンだったり、Modelにビジネスロジックが入っていてもシステムが大きくなる程に、役割や責任の範囲が曖昧になり、巨大なModelの出来上がりとなるのは「開発あるある」ではないでしょうか。

スライドにあるような、レイヤーにサービス層を入れる事で、Facadeパターンを取り入れたような設計ができます。

ちなみにCakePHP2系でパッケージを追加するのは簡単です。

app/Config/bootstrap.php

App::build(array(
    'Service' => array('%s' . 'Service' . DS)
), App::REGISTER);

で追加して、下記のように呼び出せます。

app/Controller/HogeController.php

App::uses('FugaService', 'Service');

ControllerはHTTPリクエストの操作、Viewの呼び出し、Service実行のみを行う。
Serviceはリクエストの検証、ビジネスロジック。Model実行。
Modelはバリデーション、DB操作のみを行う。ORマッパ経由でもServiceレイヤーには書かない。
Viewはロジックを入れないでとか、データ加工ならHelperとかElementを上手く使って。

これだけでも後から見たり、人が増えたりしても仕様理解が早く済む。と思っています。

これからはCakePHP3が既にリリースされているので、新機能との合わせ技で試行錯誤してみたいですね。

PHP7のリリースも迫っていて、楽しみ半分、大変そうです。