11

ColdFusion アプリケーションを構築するさまざまな方法を検討しており、アプリケーション全体の UDF を提供する最善の方法について意見を求めています。

私は通常、アプリごとに、実際には特定のオブジェクトに属さない一連の追加関数を使用します。主にデータ操作に関するものです。これらの関数を、CFM テンプレートとアプリケーションでインスタンス化された CFC の両方で使用するために、アプリケーション全体で使用できるようにしたいと考えています。

これを達成するにはさまざまな方法があると思いますが、それらにはすべて独自の制限があります。

  1. Application スコープでベース Utils CFC をインスタンス化します。これは私が最も頻繁に使用した方法です。すべての関数はアプリ全体で使用できますが、複数のアプリケーションから同じ CFC をインスタンス化すると、それぞれに独自のアプリケーション スコープが設定されます。つまり、それぞれが独自のベース Utils CFC をインスタンス化する必要があります。これには何も問題はありませんが、CFC を十分にカプセル化していないように感じます。私は、CFC 内から Application スコープを参照することに熱心ではありません。

  2. ベース Utils CFC を作成し、他のすべての CFC がこれを拡張するようにします。これは正常に動作し、CFC が CFC の THIS スコープから Utils 関数を直接参照できることを意味します。ただし、Utils 関数はすべての CFC のメモリに保持されることを意味します。また、私の他の CFC は Utils CFC とは関係がないため、概念的にも適切ではありません。

  3. ベース Utils CFC を他の CFC に注入します。私が試したもう 1 つの方法は、ベースの Utils CFC を Application スコープでインスタンス化し、それをオブジェクトとして他の CFC の引数に渡すことです。これは、概念的にもカプセル化にも役立ちます。init メソッドでデータソースを設定するのと同じ方法で、UDF で同じことを行うことができます。これには、UDF が各 CFC に含まれるという同じ問題があります。すべての CFC をダンプすると、各 UDF が複数回取得されます。誰かがそれを確認できれば、それは役に立ちます-私はただ仮定しています! この方法で私が抱えている唯一の問題は、少し複雑に見えることです。

  4. アプリケーション CFC で Utils CFC を拡張します。これは、多くのフレームワークが行っているように見えることです。私はこの方法を使用したことはありませんが、長所と短所があると確信しています。

  5. CF個別のテンプレートからの UDF を直接 Application.cfc に含める これは、アプリケーション スコープでのインスタンス化と機能的に似ています。

  6. 私のUDFをサーバーComponents.cfc のそれらの機能が必要です。さらに、サーバーを更新すると、コンポーネントが上書きされる可能性があります。コアをハッキングするのは悪いことだと私は確信しています。

だから - 私の質問はこれです: エレガントで再利用可能な方法で UDF を使用して CF を拡張するためのベストプラクティスは何ですか? 上記のオプションのいずれか、または私が考えていないものはありますか?

4

1 に答える 1