16

Oracle ATGとStrutsの違いは何ですか?

4

3 に答える 3

59

Struts は、コーディングへの MVC パターン ベースのアプローチを Web アプリケーションに提供しようとする J2EE Web アプリケーション内で使用するためのフレームワークです。これには、フォーム データ検証などのための追加ユーティリティが含まれています。これはオープン ソース プロジェクトであり、Web アプリケーション パズルの特定のピースを解決するのに非常に優れており、その特定のピースのみを解決することに限定されています。

一方、ATG (ATG Dynamo) はアプリケーション プラットフォームであり、データ駆動型およびコンテンツ駆動型の Web アプリケーションを構築するためのソリューションおよびフレームワークであり、主にコマースおよびパブリッシング用です。フレームワーク レベルでは、ORM レイヤー、コンポーネント コンテナー、MVC フレームワーク、および JSP 用のタグ ライブラリ セットを備えた、Web ベースのアプリケーションおよび RMI アクセス可能なビジネス コンポーネントをホストするための Java ベースのアプリケーション プラットフォームです。コンポーネント フレームワーク (The Nucleus) は、Java コンポーネント オブジェクト (Bean) のライフ サイクルと依存関係バインディング (依存関係注入) を管理するための軽量コンテナーです。その意味では、Spring Bean コンテナーにいくぶん似ており、ATG フレームワークのコアです。他のすべてのサービスとフレームワークはその中でホストされます。ORM レイヤー フレームワーク (リポジトリ) は、リレーショナル データベースとの間でオブジェクトをマップします (ご想像のとおり)。しかし、同じ一貫したデータ アクセス API を使用して、LDAP、XML、およびファイル システム データ ソースとのマッピングも処理できます。ページ上のフォーム要素をビジネス オブジェクトなどの値にバインドするための JSP タグは、私が見た他のどのフレームワークのフォーム バインド タグよりも洗練されていてきれいです。独自のタグ ライブラリに相当するもの (ドロップレット) を作成するメカニズムは、標準の J2EE タグよりもサーブレット API との一貫性がはるかに高くなります。

MVC フレームワーク (基本的なフォーム ハンドラー パターン) は、Struts のフォーム クラスとアクション クラスに多少似ていますが、Struts よりもはるかに基本的なフレームワークを提供します。箱から出して、ほとんどの開発者が作業するレベルでは、ATG モデルはコントローラー駆動ではなくページ駆動です。内部的には、ディスパッチャーとコントローラーをチェーンするためのパイプライン アプローチを使用して、コントローラー主導であることは間違いありません。

さらに、基本レベルのフレームワークは、RMI コンテナー、分散キャッシング、分散ロックと分散シングルトン、分散イベントとメッセージング、タスク スケジューラ、ルール エンジン、およびカスタム アクションと結果を含むビジネス ワークフローを定義するメカニズムを提供します。ビジネス ワークフロー用のグラフィカル エディタ、バージョン管理されたデータのサポート、役割と権限のサポート、ロギングと監査 - すべてすぐに使用でき、非常に一貫性のある API を使用

次に、ソリューション レベルでは、ユーザー プロファイリング、ID 管理とパーソナライゼーション、コンテンツ オーサリング、バージョン管理と公開、コンテンツ検索、有形および無形商品の製品カタログ、製品検索とガイド付きナビゲーション、価格設定、税金の計算、プロモーション、ショッピング カート、ギフト リストとウィッシュ リスト、支払いの種類、配送方法、注文の追跡、顧客関係管理など。

ATG への拡張ポイントと統合ポイントは、通常、非常に適切に設計され、十分に文書化されています。それらは、オーサリングとコンテンツ管理、アイデンティティ管理とセキュリティ、製品カタログ、検索とガイド付きナビゲーションなどのために、電子商取引と出版スペースのほとんどすべての人との統合をサポートしています。また、フレームワークのほぼすべての領域が拡張可能です。プラグ ゲーブルであるため、独自のコンポーネントを記述して、すぐに使用できるコンポーネントを拡張または置換できます。

両者を比較してもあまり意味がありません。ただし、あなたの質問を考えると、あなたが本当に興味を持っているのはATGのMVC部分だと思います

MVC の場合、Struts は ATG よりも多くの機能を提供します (ただし、Spring MVC は Struts よりもさらに多くの機能を提供します)。ただし、ATG よりも Struts の方が、フレームワークの仕組みに行き詰まる傾向があります。

個人的には、ATG のフォーム ハンドラー ベースのモデルは、私が見た他のほとんどの Web MVC フレームワークよりも洗練されていて、クリーンで、操作が簡単で、API はサーブレット API とより一貫していると思います。

また、ほとんどの「web-MVC」フレームワークは真の MVC (つまり、Smalltalk や Java Swing などでさえも GUI プログラミングに使用されるパターン) とは異なることに注意してください。Struts も ATG も (設計どおりの) 真の MVC を提供しませんが、ATG は実際にはそれに近づいています。用語については多くの混乱があります。

例えば、

  1. 真の MVC のモデルは、データ モデルでもドメイン モデル オブジェクトでもありませんビュー内のすべてのデータを表すモデルです。それがたまたまドメイン モデル オブジェクトである場合は問題ありませんが、多くの場合、別のビューまたはフォーム オブジェクトのセットが必要であることがわかります。また、モデルはそれ自体を最新の状態に保つ責任があります。下位のビジネス サービスと対話するのはモデルです。ATG は、モデルとコントローラーを 1 つのコンポーネント (フォームハンドラー) に融合する傾向があります。Struts は、ビュー データ モデル (フォーム オブジェクト) を明確に保つ傾向がありますが、真の MVC の意味でのモデルとしての使用を推奨していません。それ自体を更新するために他のビジネス サービスと対話するのはフォーム オブジェクトではありません。

  2. MVCのコントローラーはビジネス コントローラーではありません。MVC のコントローラーは、ビューとモデルの間の導管です。ビューの変更、またはビューで実行されたアクションに反応し、それに応じてモデル自体を更新するように指示します。Struts では、彼らが話しているコントローラーは MVC コントローラーではなく、実際にはディスパッチャーです。コントローラーに属する多くのコードは、最終的に Action クラスになります。しかし、Struts が設計されている方法では、Action クラスは実際には Model が行うことを行うことを意図しています。

  3. MVCのView は、モデルによって設定される必要があります。これは、ビューがモデルをクエリするプル メカニズムではなく、モデルがビューを更新するプッシュ メカニズムです。ほとんどの Web MVC フレームワークでは、ビュー (通常は JSP) がモデルから状態をプルして表示します。これは、ATG のページ駆動型アプローチの場合に特に当てはまります。ページのレンダリング中にデータがフェッチされている場合は、MVC 設計に問題があることを意味します。

Struts では、MVC コントローラーの機能は Struts コントローラーとアクションに分散され、MVC モデルの機能はフォーム オブジェクトとアクションに分散されます。

ATG では、MVC コントローラーと MVC モデルの機能はすべてフォーム ハンドラーにあります。

とは言っても、HTTP の要求と応答の性質により、Web-MVC フレームワークでのコントローラーの機能はかなり制限されています。Web アプリケーションでは、リッチ UI フレームワークの場合のように多くの小さな変更 (キーを押すたび、マウスをクリックするたび、入力フィールドを変更するたびなど) ではなく、フォームの送信時に完全に更新されたビューを取得する傾向があります。AJAX の使用はそれを変えつつあり、MVC を正しく実装することについてもっと考える必要があります。

MVC は設計パターンであることを思い出してください。つまり、アプリケーションの GUI の側面を設計するときに使用される設計時の原則です。Struts と ATG はフレームワークです。つまり、アプリケーションの構築時に拡張、実装、または構成するクラスとオブジェクトです。フレームワークは、デザイン パターンの使用を強制することはできません。それを推奨するだけです。特定のフレームワークを使用することを選択しても、ciode をより適切に設計できるわけではありません。

MVC を適切に設計すれば、実装に Struts クラスを使用するか ATG クラスを使用するかに大きな違いはありません。同様に、MVC の設計が適切でなく、選択したフレームワークが不足を補うことを期待している場合、Struts を使用するか ATG を使用するかに大きな違いはありません。設計原則を理解して作業すれば、フレームワーク間を簡単に切り替えることができます。

最良のコードは、抽象的に優れた設計原則 (真の MVC など) に準拠し、選択したフレームワークで使用可能な適切なツールを使用して、意図したとおりに実装 (実現) するコードです。

質問に戻ります。

ATG プロジェクトに取り組んでいる場合は、ATG が提供するフレームワークを使用する必要があります。Struts を ATG アプリケーションに押し込むことは確かに可能です - 私は何年も前にこれを自分でやったことがあります - しかしそれは価値があるよりもはるかに多くの努力です - そしてあなたは ATG が箱から出してすぐに提供するものの多くをあきらめていますオブジェクトのライフサイクル管理、フォーム データ バインディングなど。

新しいプロジェクトの作業を開始しようとしていて、使用するフレームワークを選択できる場合 (個人的には、オープン ソース アプリケーション サーバー (JBoss など) と Spring Framework をお勧めします)、ATG と Struts が提供するものを最大限に活用できます。Nucleus のようなコンポーネント コンテナー (アプリケーション コンテキスト) を備え、すべての優れた ORM ソリューション (Hibernate など) と統合され、Struts をはるかに凌駕した MVC フレームワークが含まれています。さらに、高レベルの GUI フロー設計については、Spring Web-flow を参照することをお勧めします。

于 2008-12-30T12:17:18.813 に答える
9

英国での主な違いは、ATG請負業者として1日あたり500ポンドを獲得できることですが、一般的なStrutsの人としては、幸運にも350ポンドを獲得できます。

苦いというわけではありません。

于 2009-08-05T10:37:40.957 に答える
-1

ATG はプロプライエタリ ソフトウェアです...そしてリソースは少なくなります...

于 2010-04-05T10:03:13.987 に答える