ログ日記

作業ログと日記とメモ

PHPの自作フレームワーク現状まとめ

https://github.com/nishimura/laiz2

基本方針

  • DB設計最優先
  • HTML構造優先
  • コード量を少なく

大抵の処理はPage(Action)クラスに書く。いわゆるAction肥大化。

もし「この二つのテーブルは大抵joinして取得している」という状況になったらModelを作っても良いが、大抵の場合は一画面ごとに処理がユニークなので共通化できない。

アプリ側はフレームワークの何かを継承してクラスを作ることが基本的にないのでテストする場合はActionクラスをテストすれば良い。


プレゼンテーションロジックがほとんどでビジネスロジックはあまりないという考えに基づく。
DB設計と画面遷移でほぼシステムの設計は決まっていて、コードに書くビジネスロジック的なものはおまけ。

アプリを作る流れ

ふつう
  1. ER図を書く
  2. SQLを書いて初期DBを作る
  3. HTMLを書く
  4. PHPを書く
  1. ER図を変更する
  2. migrationでDBを変更する
  3. PHPとHTMLを変更する

DB設計優先。
HTML優先。
PHPはDBとHTMLつなぐ手段。

デザイン優先
  1. html、css、画像などのセットをもらう
  2. PHPを書く、htmlに変数を埋める

htmlのpathなどの構造は変えない。
元々ある構造にPHPを割り当てていく。


細かい話

  • DB設計最優先:フレームワークの制約でDB設計が変わることのないように
    • 主キー自由
    • リレーション自由
    • DB変更はPHPコードで&バージョン管理
  • HTML構造優先:フレームワークの制約でHTML構造が変わることのないように
    • PHPとHTMLを同時に作る場合はPHPの1クラスにCRUDをまとめて
    • HTMLを先に作る場合はPHPと1対1で対応
    • Apache公開ディレクトリにHTMLを置くだけでOK、フレームワークによる制約は無し
    • 制御構造はタグに書く、タグをまたいだ複雑なロジックは不可
  • コード量を少なく:自動で出来るところは自動でやる
    • インスタンスの生成はタイプヒンティングから自動で
    • DBのテーブル情報をPHPに対応させるところは自動で
    • フォームから送られてくる各データをオブジェクトへ詰め替えるのは自動で
    • checkbox、selectboxなどの初期値設定は自動で

次に実装するかもしれない機能

  • 自動化を進めて更にコード量を少なく
    • DB制約から最低限のバリデーションを自動で
    • HTML5のフォーム入力チェック構文からバリデーションを自動で
  • 構造を変える
    • フレームワーク自体の構造を綺麗にする
    • フォーム処理の流れがまだしっくり来ない
      • もっと単純に簡単にしたい