1

私の知る限り、コントローラーでアクションを作成したい場合は、次の方法で作成できます。

class My Controller {
    def myAction = {
      println "in my action "
    }
}

または私はそれを作成することができます:

class My Controller {
    def myAction(){
      println "in my action "
    }
}

誰かが2つの方法論の違いを教えてもらえますか、または私の概念や認識に何か問題がある場合

4

3 に答える 3

2

最初の実装はコントローラーでパブリッククロージャーを定義することでした。2番目の実装はパブリックメソッドを使用することです。

2番目の方法はgrails2で導入され、最良の方法であると広く考えられています。

私が頭のてっぺんから考えることができるいくつかの理由:

  • 特に最近のバージョンのgrailsでは、メソッドを使用するとトレイトを利用できます。
  • 継承を使用してメソッドを整理できます
  • より効率的でなければなりません

更新: なぜgrailsアクションをクロージャではなくメソッドとして宣言する必要があり、それによってどのような違いが生じるのですか?

于 2013-03-25T08:43:56.940 に答える
0

よくわかりませんが、以前は最初の方法が唯一の方法だったと思いますが、その後、2番目の方法に変更されました。2番目の方法が好ましい方法だと思いますが、よくわかりません。

[編集]

これはそれをさらに説明する別のスタックオーバーフローの投稿です:

grailsアクションをクロージャではなくメソッドとして宣言する必要があるのはなぜですか?また、どのような違いがありますか?

于 2013-03-24T18:48:27.760 に答える
0

アクション(クロージャープロパティ)の代わりにメソッドを利用することには、いくつかの利点があります。

  1. メモリ効率
  2. ステートレスコントローラーの使用を許可する(シングルトンスコープ)
  3. サブクラスからのアクションをオーバーライドし、オーバーライドされたスーパークラスメソッドをsuper.actionName()で呼び出すことができます。
  4. メソッドは、標準のプロキシメカニズムでインターセプトできます。これは、フィールドであるため、クロージャーで行うのは複雑です。

詳細については、次のリンクをご覧ください。

Grailsコントローラー

于 2015-12-30T06:55:55.860 に答える