3

ワックは言う:

多くの議論が必要だと感じた場合は、代わりにCTを作成することを検討してください。

..。

CTは、カスタム機能よりもはるかに強力で柔軟性があります。単純な問題にはUDFを使用してみてください...より複雑なプロセス、特に単純な「マッサージ」ではなく個別のアクションと考えることができるプロセスには、CTとコンポーネントを使用してください

さて、しかしあなたは通常どのように決定を下していますか?実際の実践と例を知るのは興味深い。

私の場合、関数に不要な引数が多数ある場合に発生するため、それらをmyFunc(arg1 = "foo"、arg2 = "bar")と呼ぶ必要があります。<cfmodule>構文が単純に読みやすくなることもありますが、常にそうとは限りません。

他の理由は、私が長い(たとえば、2画面以上のコード)UDFが好きではないということです。

しかし、これらの考えはすべて非常に主観的なものであるため、他の人の意見を読むことに興味があります。たぶんそれのためのより良いルールがありますか?

前もって感謝します。

4

7 に答える 7

5

コミュニティには、私に同意しない人がたくさんいると思いますが、一般的に私がどのように考えているかを以下に示します。画面への出力が必要で、これを他のコードやテキストに「ラップ」することが理にかなっている場合は、カスタム タグが適している可能性があります。他のすべてのケースでは、UDF は正常に機能し、一般的にはより適切に機能します。そうは言っても、CF 開発に 8 年近く携わってきましたが、カスタム タグを作成する正当な理由に出会ったことはありません。その理由が存在しないと言っているわけではありませんが、まれであると言えます。

非常に長い UDF がある場合、この UDF を呼び出して画面に出力しているものであると想定しても安全ですか (実際には値を返さないという意味です)。それが理にかなっていれば、そのUDFをより小さく扱いやすい部分に分割することを検討しますが、あなたがほのめかしているように、最終的に重要なのは、あなた、あなたのチーム、そしてあなたの後に来るかもしれない人々にとって最も読みやすいものです.

更新: 好奇心から、どの CFWACK 本 (バージョンとボリューム) とどのページを参照していますか?

于 2009-03-16T12:29:10.850 に答える
2

私が覚えているように、カスタム タグはいつでも呼び出すことができますが、UDF は使用する前に定義する必要があります。これにより、一般的にカスタムタグが簡単になります。UDF の巨大なライブラリがある場合、それらがすべて含まれていることを確認するのは面倒であり、サーバーがそれらすべてを解析するのは大変な作業になる可能性があります (少なくとも昔は)。

ただし、UDF はよりコンパクトな方法で使用できます。

<cfif myUdf(myVariable)>

カスタム タグの利点は、マークアップとうまく調和できることです。

<h1>Order Page</h1>
<cf_basket_nav>
  <ul>
  <cfloop ...>
    <li>
    <cf_basket_item item="#items[i]#">
    </li>
  </cfloop>
  </ul>
</cf_basket_nav>

一般に、最近では、UDF のメソッドを含む「utils」CFC を使用します。

于 2009-03-16T12:37:34.977 に答える
1

udfs または cfc メソッドでカスタム タグを使用する際の考慮事項の 1 つは、サブルーチンに子項目の配列を渡す必要がある場合、ネストされたカスタム タグを使用して、子カスタム タグとその要素を親カスタム タグに関連付けることができることです。 . これにより、読みやすい非常にきれいなコーディングを行うことができます。

<cfmenubar ... >
  <cfloop array="menuitems" ...>
    <cfmenubaritem url="#i.url#">
      #i.label#
    </cfmenubaritem>
  </cfloop>
</cfmenubar>

はい、はい、メニューやタブなどのより優れた dhtml があることは知っています。これは単に例を示すためです。カスタム タグで cfassociate を使用して属性を親カスタム タグに「渡し」、次に executionmode="end" で、関連付けられた属性の配列で動的に生成されたすべての子項目にアクセスできます。これは、この例でメニューをループして画面に出力する場所です。

また、別のコメントとして、いくつかの巧妙なことを行うことができます...特に私が使用することの1つは、prefix="" を設定することです。次に、基本的に単純な html タグ (<a> タグなど) を強制的に強制的にキックさせることができます。実行時にカスタムタグハンドラーを介して-実行時にhtmlタグがインテリジェントになる...これを行うと、hrefとターゲット属性を分析し、次にpdfアイコン(または他のMIMEタイプのアイコン)を表示するかどうかを決定できますリンクへ...かなり滑らかです!これは、コンテンツ管理システムで特に役立ちます。また、dreamweaver を使用したりコントリビュートしたりする html 開発者がいて、標準の html 以外で何もせずにスマートな coldfusion タグをタグで起動させたい場合に特に役立ちます。エディターは違いを認識せず、編集する必要もありません。 「コード」ビューに移動して、かなり強力な機能を作成します。

最後に、カスタムタグでは、出力を抑制する (またはキャッシュを使用する) ことを選択できるため、これは動的に生成された html のチャンクをラップするのに非常に役立ちます...実行モード EQ の「終了」モードで thistag. generatedcontent 変数にアクセスします

これに風呂水を入れた赤ちゃんを捨てないでください... CFCがあるので、それらの使用頻度ははるかに低いことに同意しますが、カスタムタグにはまだいくつかの強力な機能があります...私は通常、すべてのアプリケーションに1つまたは2つ持っています(および少なくとも数十の CFC)

ジョン

于 2009-03-27T21:41:56.423 に答える
0

なぜこのパターンに陥ったのかはわかりませんが、一般に、単純なデータ/オブジェクトを返すだけのHTMLとUDFを出力するものには、カスタムタグ(常にcfmoduleを使用)を使用します。UDFでも出力できることはわかっていますが、関数に副作用がないので、これは1つのように感じます。同様の理由で、データのカプセル化を提供するため、以前はcfincludeを使用していた場所でカスタムタグを使用するようになりました。

于 2009-03-27T22:11:41.687 に答える
0

Jeremy は、HTML を CT でラップするという便利なオプションを指摘しました。しかし、この機能はめったに使用されないようです。いずれにせよ、CTにはプラスです。

また、cfscriptコーディングが好きなので、関数の方が好きだと思いました。完全に cfscript を使用したページで使用できるようにするためだけに、レガシー CT を UDF にラップする必要があったことはほとんどありません。UDFにはプラスです。

于 2009-03-16T19:51:17.743 に答える
0

単純な再利用可能なコードを UDF に入れることができます。これには、文字列の書式設定、データ構造の操作などが含まれる場合があります。

それよりも複雑なものについては、カスタム タグの代わりに CFC を使用することを検討します。オブジェクト指向モデルでは、よりクリーンなコードを記述できるようになります。タグの操作に慣れている人に使いやすさを提供したい場合は、いつでもカスタム タグを使用して CFC でロジックをラップできます。

于 2009-03-22T00:35:57.830 に答える
0

cfmodule関数に対する利点はありません。cfinvoke同じように動作します。

もちろん、cfimportすっきりとした名前空間の CT 構文を有効にすることもできます。これは、カスタム タグが適している場合です。明確なオープン/クローズ構造を使用する場合、またはネストされたロジックが重要な場合です。

それ以外の場合、特に結果を返す場合は、関数の方が処理が簡単です。

于 2009-03-16T00:09:05.450 に答える