開発者、永遠のテーマであるアーキテクチャ。
自身では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::build(array(
'Service' => array('%s' . 'Service' . DS)
), App::REGISTER);
で追加して、下記のように呼び出せます。
app/Controller/HogeController.php
App::uses('FugaService', 'Service'); |
App::uses('FugaService', 'Service');
ControllerはHTTPリクエストの操作、Viewの呼び出し、Service実行のみを行う。
Serviceはリクエストの検証、ビジネスロジック。Model実行。
Modelはバリデーション、DB操作のみを行う。ORマッパ経由でもServiceレイヤーには書かない。
Viewはロジックを入れないでとか、データ加工ならHelperとかElementを上手く使って。
これだけでも後から見たり、人が増えたりしても仕様理解が早く済む。と思っています。
これからはCakePHP3が既にリリースされているので、新機能との合わせ技で試行錯誤してみたいですね。
PHP7のリリースも迫っていて、楽しみ半分、大変そうです。
ラズパイを入手。
電源はUSBからなので元々あった Anker 40W 5ポート USB急速充電器 ACアダプタ を利用。
Raspberry Pi Model B+ (Plus)
Raspberry Pi用ケースセット
USB2.0ケーブル 0.9m
Anker USB 3.0 SD/TFカードリーダー
microSDHCカード 32GB
Raspbianを本家からダウンロードし、SDカードリーダーにて書き込み。
起動してSSHして、blink(1)の設定。
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libudev-dev
git clone https://github.com/todbot/blink1.git
cd blink1/commandline
make
cd blink1/linux
sudo cp 51-blink1.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules |
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libudev-dev
git clone https://github.com/todbot/blink1.git
cd blink1/commandline
make
cd blink1/linux
sudo cp 51-blink1.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
予定通り blink(1) mk2 を挿す。
ちゃんと光るのかコマンドラインから確認。
blink1-tool -l 1 --red && blink1-tool -l 2 --blue
blink1-tool --off |
blink1-tool -l 1 --red && blink1-tool -l 2 --blue
blink1-tool --off
blink1-tool.mdには書いてないが、blink1-mk2-tricks.mdにあるコマンドで上下と言うか、裏表というか、ちゃんと別けて光らせる事が可能。
青と赤で光らせると真ん中は混ざって紫に。流石ちょっと高いだけある。
しかも複数挿してもIDで認識し、個別に制御できるらしい。現時点では海外から頼むしかないので、3個くらい買っとけば良かった。
#ラズパイではブレッドボードとかにLEDが正統派だろうけど
取り敢えず、音声出力が標準であるのでミニスピーカーを注文した。
記事を探してるとカメラと温度センサーは欲しくなる。
赤外線リモコンも。時間、位置情報をトリガーに照明ON、OFFとか、温度センサーでクーラー制御とか、ペット飼ってる人には有り難そう。
ラズパイ32個クラスタ化。この無駄なスケール感。LEDの光り方がカッコ良すぎ。
iPhone6を手に入れたのを気に、眠っていたmyLEDを引っ張りだして来て繋げる。
古いバージョンで対応しているのか謎だったけど単色のみ動いた。
でもやっぱり、電話に出る時myLEDを90度捻って無効にしないといけないのが面倒臭い。
そんで面白半分で頼んだblink(1)というUSBライト。
Windows、OS X、Linuxなどに対応し、APIやIFTTTにも対応している。
ひとまずWindowsに挿して、メール着信やハードウェアモニタ(バッテリとか)とかで遊んでいた。
GUIでライトの色から点滅パターンまで作れる。
IFTTTと連携させていて、ふと携帯の着信もコイツで通知できないかなと思い始める。
#Gmailにさえ届けばラベル判定してどうにでもなるだろうと
どうやって着信をメール送信するか検索していたら、auではオプションサービス「お留守番サービス」に「着信お知らせ機能」が含まれる事が判明。
しかしSMSで届くらしく、ダメかなと思ったら世界のIFTTTさんはSMSに対応していた。す、すげー。
blink(1)、SMSをアクティベートして、通知するレシピを作り、Windows側のblink(1) Controlに登録してサラッと終了。
でもこれだとWindows起動してないとダメだよね。。。
今更ながらRaspberry Piを手に入れるフラグが立つ。
IRKitも欲しいな。