8

私は、Grails のベスト プラクティスと MVC パターンに従って、Service を導入し、コントローラーを肥大化させない適切な時期を判断しようとしています。ベストプラクティスについて読んだことと、一般的なプラクティスと思われることは、多少矛盾していると思うので、他の人がこれについてどう思うか聞いてみたい.

GORM 呼び出しを念頭に置いて、GORM に関係するものはすべて実際にサービスに入るべきだと思っていたでしょう。私自身はこれを実践していませんが、特に、ドメイン クラスshowに対して単純に実行しget()、取得したオブジェクトの詳細を表示するビューをレンダリングするような非常に基本的なコントローラー メソッドを記述する場合はそうです。

ただし、「Clean Code」や同様の本などの本を読んだ後は、適切に管理されたコードはまとまりがあり、メソッドは理想的には 1 つのタスクのみを実行する必要があります。完璧な世界では、コントローラの show メソッドは、ビューをレンダリングする前に表示するオブジェクトを決定することだけを担当するのでしょうか? データベースからの取得は、DB から取得し、見つからない場合は例外をスローするという唯一のタスクであるデータベース内のメソッドに入る可能性があります。

しかし、はい、これはやややり過ぎのように思えます。

そのため、さらに一歩進んでcreate()orupdate()メソッドを使用します。ここでも現在、Grails が生成したコードはすべてをコントローラーに入れ、サービスをまったく使用しません。

では、サービスを使用する必要があると推奨されるのはいつでしょうか? たとえば、通話など、何かトランザクションを実行する必要がある場合にのみcreate()、レコードをログ ファイルに書き込んで、ある種の監査ログを保持することもできます。確かにこれはサービスを保証しますか?

サービス導入のタイミングは人それぞれだと思いますが、個人差が大きいと思います。

4

2 に答える 2

6

この投稿をお勧めします: http://www.infoq.com/articles/grails-best-practices

于 2012-08-24T13:41:04.170 に答える
3

クエリをカプセル化するために Domain クラスに静的メソッドを作成しています。サービスは、トランザクション操作または複数のドメインの相互作用を伴う非常に複雑なクエリにのみ使用されます。コントローラーは、単にドメインまたはサービス メソッドを呼び出します。

于 2012-08-24T14:38:16.937 に答える