30

Grails には、ビュー レイヤーにモジュール性のための 2 つのメカニズムがあります: TemplateTagLibです。

独自の Grails アプリを作成しているときに、UI コンポーネントを作成する必要があるときに、同じ質問に直面することがよくあります:テンプレートまたは TagLib を使用する必要がありますか?

Web を検索した後、この設計上の決定に関するベスト プラクティスや経験則はあまり見つかりませんでした。

  1. 2 つのメカニズムの主な違いは何ですか?
  2. どのシナリオで、テンプレートの代わりに TagLib を使用しますか (またはその逆)?
4

2 に答える 2

24

確かに重複する部分もありますが、以下にいくつかの考慮事項を示します。これについて考える 1 つの方法は、テンプレートはメソッド レベルの再利用のようなものであり、TagLib は API レベルの再利用により便利であるということです。

  • テンプレートは、表示用に特定のものをフォーマットする必要がある場合に最適です。たとえば、ドメイン オブジェクトを特定の方法で表示したい場合、通常はテンプレートで行う方が簡単です。再利用可能ですが、再利用性は少し限られていると思います。つまり、テンプレートがある場合は、数百ページではなく、数ページで使用します。

  • 一方、taglibsは機能の小さな単位ですが、多くの場所で使用する可能性が高いものです。その中で文字列を連結する可能性が高いため、100 行の HTML を作成しようとしている場合、あまり便利ではありません。taglibs が許可する重要な機能は、サービスを注入/操作する機能です。たとえば、認証サービスを呼び出して現在のユーザーを表示するコードが必要な場合は、TagLib でのみ実行できます。この場合、taglib に何かを渡すことを心配する必要はありません。taglib がサービスから取得します。また、多くのページでそれを使用する可能性が高いため、パラメーターを必要としない taglib があると便利です。

  • いくつかの種類の taglibs もあります。これには、本体内の何かを反復処理できるもの、条件付きのものなどがありますが、これはテンプレートでは実際には不可能です。上で述べたように、巧妙に作成された taglib ライブラリを使用して、GSP コードをより読みやすくする再利用可能な API を作成できます。同じ *taglib.groovy 内に複数のタグ定義を含めることができるため、それが別の違いです。それらをすべて 1 つの場所にグループ化し、1 つの taglib から別の taglib に呼び出すことができます。

また、taglib 内からテンプレートを呼び出すことも、テンプレートを使用して taglibs を呼び出すこともできるため、必要に応じて組み合わせることができることに注意してください。

これで少しは問題が解決することを願っていますが、実際には、どの構造体がコード化するのに便利で、どのくらいの頻度で再利用されるかが問題になります。

于 2009-11-16T18:23:55.017 に答える
3

私たちに関しては...

コーダーは、他の場所ではなく、テンプレート内の特定のオブジェクト プレゼンテーション ロジックを確認する必要があります。

ビジネス ロジックとはまったく関係のない、分離されたページ要素に対してのみ taglibs を使用します。実際、私たちはそれらの使用を最小限に抑えようとしています。taglib にビジネス ロジックを記述するのは簡単すぎます。

テンプレートは従来の方法です。たとえば、それらはレイアウトをサポートします (ちなみに、それらは 3 番目のメカニズムと呼ぶことができます)

于 2009-11-16T17:41:58.597 に答える