gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

MVCぢゃなくってね&any

  • MeVC with Template

略称はMeVCwT。ってことにしといて
とりあえず念頭にいれてるのはWeb系。
MとVとCはいわゆるMVCとイメージ一緒。
ただ。結構あちこちで勘違いされてると思うですが、viewを使うこととtemplateエンジンを使うことは必ずしも == ではないので。あえて明記。
んで。
Modelには、ぢつは処理そのものをあんまり書かないようにしてたりする。
色々とごにょりごにょりする処理は「engine」と呼ばれるレイヤーに書いて、Modelは「複数のengineを必要に応じて呼び出す」class。見る角度とかレイヤーかえると、Modelは「局所的なcontroller」であると言い換えられるかもしれない。
engineは、だから「必要なパラメタを渡すセッタ」と「結果を返すゲッタ」があるのが通例。ゲッタで取れる情報如何では(特にlist系とかの、ボリュームがあるとき)、return専用の、いわゆる「構造体クラス」作ってその配列返すなんてことも多々。
engineは大抵

$obj = hogeri_engine;
// 情報を設定
$obj->set_hogeri($hogeri);

// 実行
$boolean_ret = $obj->run();

// 結果を取得
$ret_array = $obj->get();

ポイントは…実行時にはエラーをbooleanで返すだけ。エラー詳細は、get_error_detailとかget_error_codeとかメソッド作って。
最大の難関は「実行のメソッド名」(笑)。runだったりdoだったりexecだったりexecuteだったりその他もろもろ。分析系ならanalisysとかもあり。わかりやすいことが大切なのは言うまでもなし。
で、流れ的には…って絵書くの大変;;
今度ちゃんとまとめるざんす orz

  • 構造体class

privateなデータと、あとはそれらへのアクセサがついてるだけのクラス。
アクセサが関門になるから便利なのよこれが。
MWだと、構造体class用の基底クラスとして「basis_clump」ってのがいるです。

  • 配列returnをfetchに パターン

ネーミングが長い(苦笑
んと…MeVCwTにおいて。engineが「配列をどかん」と返してくるじゃない?

$ret_array = $obj->get();

これがまたメモリ食うのよ;;
なので。大容量のときは、以下のパターンもあり。

// 結果の取得&処理
while($obj->fetch()) {
  $ret_mono_class_instance = $obj->get();
}

内部的に、returnするインスタンスはちゃんと使いまわすこと!!w
これで、大分無茶なメモリから開放されます。
え? ガベコレ? それなにおいしいの? ちゃんと動くの?