CFC ベスト・プラクティス

出典: CF-OOP

目次

[編集] CFC ベスト・プラクティス

出展:http://www.dintenfass.com/cfcbestpractices/

[編集] はじめに


このドキュメントは、CFC開発者が知っているベスト・プラクティスを簡潔にまとめたものです。 より詳しいベスト・プラクティスは、Sean Corfield作成のColdFusion MX コーディングガイドラインを参照してください。

[編集] グローバルルール

  1. メソッド内のローカル変数には、常に"var"を使え!
    • ループカウンタ
    • テンポラリ変数
  2. パブリックデータへのダイレクトアクセスは厳禁!
    • コンポーネント名.メソッド()でアクセスしろ!
    • パブリックデータへのダイレクトアクセスは、インタフェースの設計に反します。
    • 良い例
      foo = myCFCInstance.getInterestingStuff()
      myCFCInstance.setInterestingStuff(foo)
    • 悪い例
      foo = myCFCInstance.interestingStuff
      myCFCInstance.interestingStuff = foo.
  3. プライベート・データとして、"this"スコープを使用するな!
    • "this"は、"variables"スコープのことです。
  4. "arguments"は、常に明示するか、一切明示しないかのどちらかにしろ!
    • 常時、明示するのがお勧めです。
  5. CFCOMPONENTとCFFUNCTIONタグでは、「OUTPUT="false"」にすること!
    • ファンクションの実行結果をページに書き出したいのであれば、cfmファイルに以下のように記述すること。
      "#myCFC.someHTMLGeneratingMethod()#"
  6. ドキュメントの可読性向上のため、CFCOMPONENT/CFFUNCTION/CFARGUMENTの"hint"属性を必ず使用すること!
  7. CFFUNCTIONのRETURNTYPE属性 と CFARGUMENTSのTYPE属性 は必ず指定しろ。
    • ドキュメントの可読性向上とランタイムによる型式チェックを行うためです。
    • ファンクションが何も返さないのであれば、RETURNTYPE="void"を忘れずに!
    • カスタムオブジェクト型を使用する場合、TYPE="any"とすること!速度パフォーマンスが向上する。
  8. CFC内で外部変数を直接参照しないこと!
    • session変数やapplication変数など
    • 例外は、ウェブサービスやFlashリモーティング用にファザード(facade)を構築するときだけです。
  9. メソッド引数のうち、必須でないものには"DEFAULT"値を指定すること!
  10. CFCタグの"EXTENDS"は、"is-a"として使用しろ!"has-a"やコード再利用目的で使用するな!

[編集] オプション(しかし、結構重要)


  1. CFCのコンストラクタとして、常にinit()を使うこと。また、return "this"とすること。
    • return "this"は、例外として、ウェブサービスやFlashリモーティング用ファザード(facade)では使用しません。
  2. CFCのインスタンスを作成するには、VARIABLESスコープに"仮想スコープ"を作成しろ!
    • <cfset variables.instance = structNew() />

[編集] 留意事項


  1. 変数の「参照渡し」と「値渡し」
    • 値渡し:strings, arrays, numbers, dates  
    • 参照渡し:structures, queries, "complex" objects
  2. Duplicate()とCFWDDXは、CFCインスタンス上では動作しない。
  3. パッケージ属性のCFCの継承
    • ACCESS="package"と指定されたメソッドは、同一パッケージ内のみで継承可能。
    • 同一パッケージとは:同一ディレクトリ、サブディレクトリ
  4. 継承されたCFCのRETURNTYPEと引数のTYPE属性
    • 継承されたCFCメソッドのRETURNTYPEと引数のTYPEは、継承元の属性を引き継ぐ。