Monthly Archives: 2月 2014

「SQLアンチパターン」第28回 (2/25)

Posted on by 0 comment

参加者 沼田(読み手)、今井、青木(記)

範囲 pp.273-285

IV部 アプリケーション開発のアンチパターン

  • 24章 マジックビーンズ(魔法の豆)
    • 24.5 解決策:モデルがアクティブレコードを「持つ」ようにする
      • 24.5.2 ドメインモデルの使用 (p.273 domainmodel.phpから)
        • 「前述したサンプルコードをどのようにリファクタリングできるか」とありますが、前述したサンプルコードから処理内容が変わってしまっているところがあります。
          未定義のメンバーにアクセスしている部分がありますが、ちょっと気になります。
          サンプルコードと図24-3で整合性がとれていないところがあります。
      • 24.5.3 プレーンなオブジェクトのテスト
      • 24.5.4 現実的に考える
  • 25章 砂の城
    • 25.1 目的:サービスの安定稼働
    • 25.2 アンチパターン:想定不足
    • 25.3 アンチパターンの見つけ方
    • 25.4 アンチパターンを用いてもよい場合
    • 25.5 解決策
      • 25.5.1 ベンチマーク
      • 25.5.2 テスト環境の構築
      • 25.5.3 例外処理
      • 25.5.4 バックアップ
      • 25.5.5 高可用性
      • 25.5.6 ディザスタリカバリ
      • 25.5.7 運用ポリシーの策定

「SQLアンチパターン」第27回 (2/21)

Posted on by 0 comment

参加者 青木(読み手)、沼田、今井(記)

範囲 pp.266-273

IV部 アプリケーション開発のアンチパターン

  • 24章 マジックビーンズ(魔法の豆)
    • 24.2 アンチパターン:モデルがアクティブレコードそのもの
      • 24.2.1 アクティブレコードはモデルをデータベーススキーマに強く依存させてしまう
      • 24.2.2 アクティブレコードはCRUD機能を公開してしまう
      • 24.2.3 アクティブレコードはドメインモデル貧血症をもたらす
        • p.268 displayAction()内
          • 下から2行目の $productsTable が使用されていない。
          • $bug が参照されているだけで値が入っていない。
            2行目の $this->view->bug に代入する前に、一旦 $bug に入れているつもり?
      • 24.2.4 マジックビーンズのユニットテストは困難
    • 24.3 アンチパターンの見つけ方
    • 24.4 アンチパターンを用いても良い場合
    • 24.5 解決策:モデルがアクティブレコードを「持つ」ようにする
      • 24.5.1 モデルを理解する
      • 24.5.2 ドメインモデルの使用 (p.273 domainmodel.phpの前まで)

「SQLアンチパターン」第26回(2/18)

Posted on by 0 comment

参加者 今井(読み手)、沼田(記)
範囲 pp.255 – 266

IV部 アプリケーション開発のアンチパターン

  • 23章 ディプロマティック・イミュニティ(外交特権)
    • 23.5 解決策:包括的に品質問題に取り組む
      • 23.5.1 文書化(ストアドプロシージャから)
      • 23.5.2 バージョン管理
        • 囲み スキーマ進化ツール
          AddHoursToBugsのupには:decimalがあるが、downには:decimalが無いのは何故だろう?
      • 23.5.3 テスティング
        • Diplomatic_immunity/DatabaseTest.php
          コード中に出てくるassertInternalTypeは、第1引数が期待値、第2引数が実際の値、第3引数がアサーションに失敗した場合のメッセージでした。
      • 23.5.4 複数のブランチを扱う
  • 24章 マジックビーンズ(魔法の豆)
    • 24.1 目的:MVCのM(モデル)を単純化する
    • 24.2 アンチパターン:モデルがアクティブレコードそのもの

「SQLアンチパターン」第25回 (2/14)

Posted on by 0 comment

参加者 沼田(読み手)、今井、青木(記)

範囲 pp.240-255

IV部 アプリケーション開発のアンチパターン

  • 21章 シュードキー・ニートフリーク(疑似キー潔癖症)
    • 21.5.2 GUIDの使用
    • 21.5.3 最も重要な問題
  • 22章 シー・ノー・エビル(臭いものに蓋)
    • 22.1 目的:簡潔なコードを書く
    • 22.2 アンチパターン:肝心な部分を見逃す
      • 22.2.1 診断せずに判断する
      • 22.2.2 見逃しがちなコード
    • 22.3 アンチパターンの見つけ方
    • 22.4 アンチパターンを用いてもよい場合
    • 22.5 解決策:エラーから優雅に回復する
      • 22.5.1 リズムを維持する
      • 22.5.2 ステップをたどり直す
  • 23章 ディプロマティック・イミュニティ(外交特権)
    • 23.1 目的:ベストプラクティスを採用する
    • 23.2 アンチパターン:SQLを特別扱いする
    • 23.3 アンチパターンの見つけ方
    • 23.4 アンチパターンを用いてもよい場合
    • 23.5 解決策:包括的に品質問題に取り組む
      • 23.5.1 文書化(ストアドプロシージャまで)

「SQLアンチパターン」第24回 (2/7)

Posted on by 0 comment

参加者 青木(読み手)、沼田、今井(記)

範囲 pp.230-240

IV部 アプリケーション開発のアンチパターン

  • 20章 SQLインジェクション
    • 20.5 解決策:誰も信用してはならない
      • 20.5.2 動的値のパラメータ化
        • p.230 parameter.php
          account_idに対するbindValue()は、PARAM_INTになっているが、parameter.sqlでは”で括られている。値が文字列であればかってに文字列扱いになるのか。
      • 20.5.3 動的値を引用符で囲む
        • p.231 囲みに関連して
          この例では同じprepared statementを複数回使えない。複数回使うことによる利点がなくてもSQLインジェクションに対する利点だけで使うのが一般的なのだろうか。
          この本からはそのように感じ取れる。
      • 20.5.4 ユーザーの入力をコードから隔離する
      • 20.5.5 他の開発者にコードをレビューしてもらう
  • 21章 シュードキー・ニートフリーク(疑似キー潔癖症)
    • 21.1 目的:欠番を詰める
      • 21.2 アンチパターン:隙間を埋める
        • p.237 表21-3
          bug_id=4 -> 3の例だが、更新前のテーブルであろう表21-1と値が変わっているのでわかりにくい。
      • 21.2.1 欠番を割り当てる
      • 21.2.2 既存行に番号を振り直す
      • 21.2.3 データ不一致の元
    • 21.3 アンチパターンの見つけ方
    • 21.4 アンチパターンを用いてもよい場合
    • 21.5 解決策:疑似キーの欠番は埋めない
      • 21.5.1 行のナンバリング
        • p.239 中程「(例:インターネット検索サイトにおける検索結果ページ)」は、この位置より一文前の「… サブセットを返したい場合」についていたほうがわかりやすい。
        • p.239 row_number.sql
          OVERって知らなかった。MySQLには無いようだ。

「SQLアンチパターン」第23回(2/4)

Posted on by 0 comment

参加者 今井(読み手)、青木、沼田(記)
範囲 pp.219 – 229

IV部 アプリケーション開発のアンチパターン

  • 20章 SQLインジェクション
    • 20.1 目的:動的SQLを記述する
    • 20.2 アンチパターン:未検証の入力をコードとして実行する
      • 20.2.1 アクシデントは起きる
      • 20.2.2 ウェブ最大のセキュリティ脅威
      • 20.2.3 対処法の追求
    • 20.3 アンチパターンの見つけ方
      • 「ルール31」:後部座席に気をつけようのカコミ内のSQL
        MATCH(カラム名) AGAINST(検索文字列)…全文検索のようです。
    • 20.4 アンチパターンを用いてもよい場合
    • 20.5 解決策:誰も信用してはならない
      • 20.5.1 入力のフィルタリング
        • PHPのfilter_input関数のマニュアルはこちら