13

私は現在、Scott Davis&JasonRudolphによるGettingStarted with Grails、SecondEditionの例を読んで作業しています。

この本はGrails1.2を使用して書かれました。

彼らは、debug()によって呼び出されるメソッドを作成するコードサンプルを持っており、はメソッドであるため、URLを介してユーザーに公開されないことbeforeInterceptorを説明しています。debug()彼らは、クロージャがコントローラアクションとしてエンドユーザーに公開されていると説明していますが、メソッドは公開されていません。

Grails 1.3のドキュメントでも見ましたが、通常の方法をほのめかしています。

def auth() { ... } 

クロージャーではなくメソッドであるため、プライベートとして扱われます。これはGrails1.3の時点で真実でした。

ただし、Grails 2.0.0以降、コントローラーアクションはメソッドとクロージャの両方として実装できます

これにより、エンドユーザーに公開されないコントローラーでメソッドを作成するというGrails 2.0.0より前のバージョンで利用可能な機能を複製する方法を考えました(そして理解しようとしました)。

私は2つの可能なアプローチを考え、どちらがより良いスタイル/練習になるのか、そしてその理由を考えていました。

  1. アクセサをプライベートとして設定します。private def auth()
  2. メソッドのallowedMethodsを空の文字列に設定します。

    static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""]
    

どちらのアプローチも、望ましい効果を達成しているように見えました。ただし、最初のアプローチではHTTPエラーコード404が生成され、2番目のアプローチではHTTPエラーコード405が生成されます。

誰かがどちらのアプローチが好ましいか知っていますか?また、他のアプローチ、またはそうするための「ベストプラクティス手法」はありますか?

4

2 に答える 2

15

Grails 2.0では、プライベートまたは保護としてマークされたメソッドはアクションとは見なされません。

allowedMethodsこの方法でメソッドをマークすると、変数を振り返る代わりに、メソッドが実行可能かどうかがメソッド宣言ですぐにわかるため、メンテナンス上の理由からより有益です。また、アクセスできないメソッドは、その宣言が削除されたり、に追加されなかったりしても、誤ってアクセス可能になることはありませんallowedMethods

于 2012-08-24T21:38:45.970 に答える
4

404は、405を使用して、それと呼ばれる関数があったことを知るために使用できるものがあることを隠しているため、プライベートとしてマークするのが最適です。(それは大いに役立つというわけではありません。)

また、メソッドをプライベートとしてマークすると、アクションではないことがメソッドに示されるので便利です。

于 2012-08-24T20:19:59.393 に答える