5

Rails、Grails などの Web フレームワークを見てきました。Spring Framework で Hibernate を使用してアプリケーションを実行することに慣れていて、もっと生産的なものが必要です。

私が気づいたことの 1 つは、Grails には魅力的な機能もある一方で、深刻な問題もいくつかあるということです。Grails のコントローラー:

1) ひどく実装されています。実行時にスーパークラスから拡張できないようです。ベース アクションとヘルパー メソッドを追加するためにこれを試しましたが、これにより grails が爆発するようです。

2) 廃止されたリクエスト パラメータ モデルに基づいています (フォーム バッキング オブジェクトではなく、はるかに優れています)。

3) テストが難しい。コマンド オブジェクトの扱いはまったく異なります...そして実際には、コントローラ コードを記述するよりもテストを記述する方がはるかに困難です。

4) コマンド オブジェクトの動作はまったく異なります。それらは事前に検証されてバインドされているため、基本的なパラメーター モデルよりも多くの矛盾が生じます。

5) コマンド オブジェクトは再利用できず、制約やフィールドなど、ドメイン クラスのほとんどのものを再利用するのは面倒です。これは、基本的なSpringで行うのは簡単です。Grails で行うのが簡単ではなかったのはなぜですか?

6) 生成される足場はまったくのがらくたです。挿入と更新を一般化するのではなく、実際には、create.gsp と edit.gsp の 2 つのビューで大量のコードをコピー/貼り付けします。ビュー自体は、わんわんやることの巨大な山です。これは、オブジェクトではなく低レベルのパラメーターを使用するという事実によってさらに悪化します。

統合テストは、Spring 統合テストよりも 30 倍遅くなります。それは嫌です。

一部のモッキング テストは、作成が非常に難しく、展開されたときに動作することが保証されていないため、高速な tdd テスト サイクルが妨げられていると思います。

taglibの追加など、ほとんどのことは、実行中にgrailsを台無しにするように見えます。サーバーの再起動の問題はまったく解決されませんでした。

Spring/Hibernate/Java を使用することが唯一の方法だと考え始めています。スタートアップにはかなりのコストがかかりますが、最終的には平準化されることを私は知っています。

Scala のような言語を使用できないのは残念です...慣用的に、Hibernate と互換性がないためです。

このアプリは、データベースに対するありふれた UI でもありません。それはいくらかありますが、前かがみになることはありません。Grails がコントローラー層にあるので、今は死ぬほど怖いです。

私ができることについての提案はありますか?

4

4 に答える 4

4

Play!をチェックアウトできます。フレームワーク。私は現在、うまくいっているように見える grails のアプリケーションに取り組んでおり、実際には play フレームワークをあまり使っていないので、うまくいくかもしれないし、うまくいかないかもしれません。play フレームワークに最近追加されたものの 1 つは、Scala でコーディングできるようにする Scala モジュールです。

于 2010-05-30T01:20:27.407 に答える
3

すべての抽象化はリークします。聖杯の反対側に 6 つのアイテムを挙げます。春に向けての一枚。それなら、あなたは春を好むようです。

于 2010-05-29T23:56:17.407 に答える
1

過去 1 年間、いくつかのプロジェクトで Grails を使用してきましたが、開発の生産性の向上が短所をはるかに上回っていることがわかりました。回避できない短所は見つかりませんでした。

あなたの具体的な反論のいくつかについて:

1) ひどく実装されています。実行時にスーパークラスから拡張できないようです。ベース アクションとヘルパー メソッドを追加するためにこれを試しましたが、これにより grails が爆発するようです。

FWIW、基本クラスからコントローラーを拡張する必要性を感じたことはありません。各コントローラーは、再利用に適していない特定の HTTP 呼び出しをサポートしており、再利用が必要なものはすべてサービスに委任できます (委任する必要があります)。

2) 廃止されたリクエスト パラメータ モデルに基づいています (フォーム バッキング オブジェクトではなく、はるかに優れています)。

繰り返しますが、これは私にとって問題ではありませんでした。Grails は、すべてのパラメーターを Map に適切にパッケージ化します。これは、私が通常必要とするすべてのものです。さらに必要な場合は、非常に簡単な Command オブジェクトを作成します。

3) テストが難しい。コマンド オブジェクトの扱いはまったく異なります...そして実際には、コントローラ コードを記述するよりもテストを記述する方がはるかに困難です。

はい、grails でのテストは、その欠点の 1 つです。私は Grails テスト ハーネスを完全に放棄し、Selenium を使用して GUI を介してテストを自動化しています。理想的ではありませんが、うまくいきました。

6) 生成される足場はまったくのがらくたです。挿入と更新を一般化するのではなく、実際には、create.gsp と edit.gsp の 2 つのビューで大量のコードをコピー/貼り付けします。ビュー自体は、わんわんやることの巨大な山です。これは、オブジェクトではなく低レベルのパラメーターを使用するという事実によってさらに悪化します。

私は実際に足場が始めるのにかなり役立つことを発見しました. ネイティブ形式で本番環境に移行することはありませんが (内部アプリの場合を除いて)、アプリの基本的な構成要素の開発を開始するための時間を大幅に節約できます。また、提供されているものが気に入らない場合は、いつでも独自の足場テンプレートを作成できます。

統合テストは、Spring 統合テストよりも 30 倍遅くなります。それは嫌です。

一部のモッキング テストは、作成が非常に難しく、展開されたときに動作することが保証されていないため、高速な tdd テスト サイクルが妨げられていると思います。

繰り返しますが、テストは Grails の得意分野ではありません。

taglibの追加など、ほとんどのことは、実行中にgrailsを台無しにしているようです。サーバーの再起動の問題はまったく解決されませんでした。

1.2 がリリースされて以来、この分野で問題が発生したことはありません。これは、私が使用した中で最もクリーンな実行中の変更環境です。確かに、再起動が必要なものはいくつかあります (例: ブートストラップへの改造) が、開発のほとんどの段階では問題なく動作します。

私は、Spring/Hibernate/Java を使用することが唯一の方法だと考え始めています。スタートアップにはかなりのコストがかかりますが、最終的には平準化されることを私は知っています。

スタートアップ時だけでなく、開発プロセス全体を通して。私が一緒に働いているチームは、「従来の」フレームワークを使用した場合の 3 倍から 5 倍の速さで、本番対応の機能を作成していると思います。すべての人やすべてのプロジェクトに適しているわけではありませんし、完全ではありませんが、プロジェクトが Grails の強みに適合している場合は、大きなアクセラレーターになる可能性があります。それに加えて、使用する Grails の量を大部分選択できるという事実 (必要に応じて Spring/J2EE レイヤーを利用するのとは対照的) を追加します。私の2c。

于 2010-06-15T15:26:30.117 に答える
1

Spring/Hibernate/Java を使用することが唯一の方法だと考え始めています。スタートアップにはかなりのコストがかかりますが、最終的には平準化されることを私は知っています。

次に、Spring Rooを見てみましょう(Grails vs Roo もお読みください- なぜ SpringSource は 2 つの非常によく似たテクノロジーを推し進めているのですか? )。

于 2010-05-30T02:01:19.073 に答える