2011-11-02 7 views
5

私はかなり一般的なGrailsアプリケーションを持っています。モノリシックです。それは機能ラインに沿ってプラグインにいくらか分割されていますが、展開のための単一の戦争に組み込まれています。会社の建築上の制約のため、私はアプリケーションの永続性をWebサービス(または一連のWebサービス)に分離することを検討する必要があります。 Grailsアプリケーションを永続化サービスとプレゼンテーションアプリケーションに分割する最良の方法は何ですか?GrailsアプリケーションをWebサービスとプレゼンテーションに分割する最適な方法は何ですか?

+0

あなたは、Webサービスとプレゼンテーション層を検討する必要があるという主張についてすでにあなた自身の質問の多くを答えています。アーキテクチャや技術の選択肢についてもっと探していますか?私はプレゼンテーションがDMZに展開され、ファイアウォールによってサービス層から分離されていると思っています。答えに重要な影響を及ぼすアーキテクチャ上の制約はありますか? – darrend

+0

私はGrails中心のソリューションを探しています。私には、プラットホームのためのセマンティクスがすでに存在しているようです。 (1)コントローラー、taglib、サービスコードをリモート認識できるように即座に変換し、ドメインクラス用のWebサービスビルドを生成する「magic bullet」プラグインを指摘してください。(2) Grailsはこのようにプレゼンテーションと永続性を分離するのにふさわしくないと説明します。どちらもどちらも賢明ではありませんが、その間にGrailsのパラダイムに合ったやり方をエレガントに活用する方法を提案するかもしれません。 –

+0

データベースをファイアウォールするのは合理的ですが、Webサービスを通じて操作を実行できるようにするにはどうすればよいですか?あなたはセキュリティの向上を期待していますか?セキュリティをどのように改善するかはわかりません。 – Antoine

答えて

0

私はあなたの問題に対してすぐに使えるソリューションはありません。私が使用しているソリューションと、私があなたのケースで考えていることについて説明します。

私のアプローチでは、GrailsのバックエンドとFlexのフロントエンドでアプリケーションを分ける方法があります。その理由は、すぐに使用できるFlexコンポーネントが多く、純粋なWebテクノロジを使用して再実装するには時間がかかりますが、これは私の要点ではありません。

GrailsでRESTバックエンドを作成すると、ビューが適切なときにスキャフォールドされるため、コントローラが簡単になり、ドメインの制約によって入力の検証が大幅に簡素化されます。

この分割の欠点は、ドメインオブジェクトの定義をフロントエンドで複製する必要があることです。フロントエンドにオブジェクトの検証を含めるかどうかを指定することもできますが、省略した場合はUIの応答性に影響します(AJAXのRESTバックエンドへの要求でのリアルタイムの検証が必要です) 。最終的には、バックエンドのオブジェクトを変更するとフロントエンドの変更を意味するため、アプリケーションは非常に面倒です。さらに、フロントエンドとバックエンドの両方で検証を行いますが、このコードは共有されていないため、フェーズを維持して2つの場所で管理する必要があります。

私たちのアプリケーションは、コードを共有しない2つの全く異なるGrailsアプリケーションと同様の方法で分割されています。あなたのケースではうまくいくが、あなたが探しているものではない解決策、確かに。あなたのケースでは

、私は、Webフロントエンドのための2つの実行可能な解決策を参照してください。

  • はフェッチして、コントローラから直接あなたのドメインオブジェクトを返送するGroovy REST client libraryを使用しています。必要に応じて、ドメインオブジェクトを反映するコマンドオブジェクトにパックして、検証コードをバックエンドと共有できるようにします。

  • あなたのREST WebサービスへのクエリでHibernateを置き換えるREST GORMのいくつかの種類を作成します。このようなGORM置換えの作成方法の例として、GORM for Mongo Pluginを見ることができます。

私は最後のアイデアが好きなので、役に立つパブリックプラグインです。残念ながら、それはまだ存在しません。

+0

最後のアイデアも好きです。私はGORMの経験をしたいと思います。それがうまくいくならば、公衆への利益は重要なものになるでしょう。 –

+1

それに幸いです:) REST APIのための普遍的な標準はなく、それぞれのメリットを考慮する必要があります。品質は大きく異なります。メタクラス・メソッドを、統合が固定されている別のデータベース・バックエンドにマッピングするのとは異なり、プログラマーは、使用したい特定のREST APIにメソッドをマップする方法を提供する必要があります。可能であれば難解な複雑さに悩まされて、私は思っていただろう。ところで、apigee.comのいくつかの良いRESTfulなデザインの考慮事項は、これだけではありません。http://blog.apigee.com/detail/restful_api_design/ – darrend

1

ドメインクラスをGrailsプラグインに入れ、Webフロントエンド用とWebサービス用の2つのGrailsアプリケーションを用意してください。どちらもデータベースに直接アクセスしますが、永続性のためのコードは複製されません。

これを実現する方法の詳細については、blog postをご覧ください。

+0

ブログの投稿は素晴らしいです - 私はあなたにそれを指摘してくれて感謝しています。しかし、私は問題の説明で十分に明確ではありませんでした。 *私のアプリケーションから直接データベースにアクセスすることが禁止されている*と考えてください。代わりに、私はデータベースと通信せず、Webサービスを介して保存する、外部に面するアプリケーションからWebプレゼンスを操作する必要があります。 しかし、すべてのドメインオブジェクトをプラグインに配置することは、興味深い考え方です。 –

+0

Grailsのいくつかのアプリケーションで同じデータベースを使用できるように、ドメインクラスをGrailsプラグインに保存します。それはうまくいく。 – erturne

関連する問題