CFCベスト・プラクティス
ColdFusionオブジェクト指向プログラミング・ユーザーのための
「CFCベスト・プラクティス」がPeter Bellのブログで紹介されています。
さくっと意訳してみました。
詳しくは、CF-OOP Wikiを確認してください。
- メソッド内のローカル変数には、常に"var"を使え!
- ループカウンタ
- テンポラリ変数
- パブリックデータへのダイレクトアクセスは厳禁!
- コンポーネント名.メソッド()でアクセスしろ!
- パブリックデータへのダイレクトアクセスは、インタフェースの設計に反します。
- 良い例
- foo = myCFCInstance.getInterestingStuff()
- myCFCInstance.setInterestingStuff(foo)
- 悪い例
- foo = myCFCInstance.interestingStuff
- myCFCInstance.interestingStuff = foo.
- プライベート・データとして、"this"スコープを使用するな!
- "this"は、"variables"スコープのことです。
- "arguments"は、常に明示するか、一切明示しないかのどちらかにしろ!
- 常時、明示するのがお勧めです。
- CFCOMPONENTとCFFUNCTIONタグでは、「OUTPUT="false"」にすること!
- ファンクションの実行結果をページに書き出したいのであれば、cfmファイルに以下のように記述すること。
- "#myCFC.someHTMLGeneratingMethod()#"
- ファンクションの実行結果をページに書き出したいのであれば、cfmファイルに以下のように記述すること。
- ドキュメントの可読性向上のため、CFCOMPONENT/CFFUNCTION/CFARGUMENTの"hint"属性を必ず使用すること!
- CFFUNCTIONのRETURNTYPE属性 と CFARGUMENTSのTYPE属性 は必ず指定しろ。
- ドキュメントの可読性向上とランタイムによる型式チェック
速度向上のためです。 - ファンクションが何も返さないのであれば、RETURNTYPE="void"を忘れずに!
- カスタムオブジェクト型を使用する場合、TYPE="any"とすることで、速度パフォーマンスが向上する。
- ドキュメントの可読性向上とランタイムによる型式チェック
- CFC内で外部変数を直接参照しないこと!
- session変数やapplication変数など
- 例外は、ウェブサービスやFlashリモーティング用にファザード(facade)を構築するときだけです。
- メソッド引数のうち、必須でないものには"DEFAULT"値を指定すること!
- CFCタグの"EXTENDS"は、"is-a"として使用しろ!"has-a"やコード再利用目的で使用するな!
田中さん、お返事有難うございます。
そうですね、Duck Typing によるパフォーマンスの向上に関してリークしてしまったことをSeanはかなり後悔しているみたいですが、実際にパフォーマンス向上のためにフレームワーク内のCFCからタイプ属性をとりはらったり(あるいはAnyに指定する)、開発中はタイプ属性を明示するけれどプロダクションではなくしちゃう(あるいはAnyにしちゃう)人が結構いるみたいですね。
確か、CFにはType Safety の恩恵がない(コンパイルしない)から、詳しいタイプ属性はヒント属性に書いておいて、タイプ属性は常にAny でいいんじゃないかという人もいたと思います。Peter Bell か Nando あたり。実は僕も結構賛成です。
でも僕は小さいアプリケーションしか書かないので、タイプ属性が不明な時以外はタイプ属性をしっかり指定する(strongly typed)ようにしています・・・単なる自己満足と分かっていながら(^^;;;
ではまた。
投稿: Terry | 2006-10-23 20:24
Terryさん、コメントありがとうございます。
ご指摘のとおり、原文を読むと"速度向上"とは書いていませんね。
Sean Corfieldのプレゼン資料で、CF7ではType="any"としたほうがかえってランタイムチェックを行わないため、速度パフォーマンスが良いということが書かれていたので、そのように書いてしまいました。
修正しておきます。
http://corfield.org/articles/ducktyping_cfunited.pdf
http://corfield.org/blog/index.cfm/do/blog.entry/entry/More_on_Duck_Typing
投稿: 田中 知明 | 2006-10-22 01:13
はじめまして。いつも楽しく拝見させていただいています。
一点だけ気になったことですが・・・
7)TYPE属性を指定すると、、ランタイムによる型式チェックのためにパフォーマンスがやや低下すると書かれていると思いますし、一般的にそのように言われていると思います。特にカスタムデータ型の場合ですが。
(もちろんTYPE属性を必ず指定しようというのには僕も賛成です)
投稿: Terry | 2006-10-21 23:34