アーキテクチャの話し

開発者、永遠のテーマであるアーキテクチャ。
自身では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のリリースも迫っていて、楽しみ半分、大変そうです。

変数に型がないということの利点について考える

開発言語は道具のひとつに過ぎないので、○○だから優れているとか、そういう話じゃないと思うんですがね。
私はPHPの雑な言語仕様に慣れているけど、これが10人以上の開発者が関わるならJavaとか型があった方が良いなと考えます。
開発言語の理解度やスキルに差がある場合、言語仕様レベルで品質を担保できる仕組みがあった方が楽だから。それだけです。
フレームワークを使うのも半分はこれが理由で、コーディング規約やデザインパターンで統一性が確保できるハズだからです。
極論ですが、別に自分のソースだけではなく全員のソースレビューをする(できる人材が居る)会社なら道具なんて尚更何でも良いです。

PHPに限っていえばis_string、is_intとかある時点で当初は?となりましたが。
それも入力値のバリデーション用と考えるか、functionで毎度、引数の型判定から例外を投げるようにするかで変わってきますし。
毎度書くとエラー処理が冗長化されるので最終的なDB処理のfunctionのみで書くのか、それすらせずにSQLエラーで返ってくるのを待つのか。

それは求めるモノによるので、使い分ければいいじゃないって元の話に戻るのでした。

Eclipse4.2 PDTをインストール

すっかりSublimeText2に乗り換えたつもりでいましたが、PCがパワーアップしてEclipseが超速起動、メモリも16GBで湯水のごとく余っている。
あのタブ切り替えのモッサリ感とかどうなったのかなーと、4.2に再チャレンジ。

Javaもセキュリティホールで緊急アップデート勧告が出ていたので、この際64bit版にそろそろ移行しようではないかと。

後はいつもお世話になっている日本語化+各種プラグイン詰め合わせ済みのPleiades版Eclipse4.2の64bit、PHP Standard Editionをダウンロードして解凍するだけ!とは行かない。

PHP アプリケーション開発のために Eclipse に入れてるプラグインと設定。

こちらはモッサリ時のEclipse4系で3.8で我慢されておりますが、上で入れた4.2はサクサク動く上に、記載されているプラグインも概ね入ってます。
・AnyEdit
・EGit
・Eclipse Color Theme

・Marketplace Client
なんて面白そうなプラグインが出てるんですなー。

後は設定など参考にさせていただきました。

ちょっと古いですが、プラグインとしてはインストールできました。
DB設計の神ツール「ERMaster」なら、ここまでできる
動作は未確認です。

追記
Eclipse4.2 SR2がリリースされています。
15 個のパフォーマンス問題が改善! Eclipse 4.2 Juno SR2 リリース

・XML エディター切り替えが超遅い
・エディター開閉時のオブジェクト・リーク
・ビュー開閉時のメモリー・リークいっぱい
・何にもしてないのに毎秒数百のオブジェクト割り当て
・エディターの後選択の概念の実装忘れてた
・パーツ活性化時に後選択イベントを 2 回送出
・オーバーライドした IContributionManager#getVisible が 2000~1万回呼ばれてる
・アクション・バー破棄してない
・CTab 描画の改善
・URI 指定のファイル検索が遅い
・行移動が超遅い
・コンテキスト・マネージャー呼びすぎ
・ポップアップ・メニューのリスナー・リーク

私の環境では割りとサクサク動いてたのはリソースが湯水のようにあったからでしょうか・・・。