0

私はネイティブ スクリプト (JSP) ベースの RESTful Web フレームワーク内で作業しています。フレームワークには、多数のリクエスト属性を自動的に設定するルーティング メカニズムがあり、これを JSP で使用できます (属性の 1 つは、リクエストされたリソースの「モデル」であり、基本的には単なる HashMap です)。

問題は 90% の確率であり、より複雑なドメイン ロジック、他のリソース データ (他のモデル) の取得、または出力用のデータのスクラブなど、ある程度のロジックを JSP に追加する必要があります。

私は、JSP からドメイン ロジックを抽出し、JSP を可能な限りロジックのない状態に保つためのさまざまな確立された Web アプリケーション デザイン パターンを検討しています。

注意すべき点がいくつかあります。

  1. 私が作業しているシステム内では、モデル (データベースからのデータ プル) が提供されますが、フレームワーク (前述の HashMap) が提供されます。このデータの周りに独自のモデル ラッパーを作成することもできますが、おそらく不要です。
  2. JSP/スクリプトはリクエストのエンドポイントです - ビューが使用するすべてのデータを含むビュー Bean (ViewModel?) を返すプレゼンター/コントローラー タイプのオブジェクトを使用するパターンを使用する場合、行が必要になります。 Presenter/Controller を呼び出して View Bean をインスタンス化する JSP で。

現在、モデルにアクセスできるモジュール (スクリプト) ごとにプレゼンター POJO を作成し (フレームワークはこれをリクエスト属性として設定します)、JSP の上部でインスタンス化するだけで、それをさらに使用したり、豆のようではありません。

私がそれを正しく理解していれば、プレゼンテーション モデルのデザイン パターンを実装したと思います。[1]

元。

JSP は次のようになります。

<% DemoPresenter demo = new DemoPresenter(request) %>
<%= demo.getTitle() %>
- or add it to pageContext to use w JSTL/EL -
<c:set var="demo" value="new DemoPresenter(request)"/>
${demo.title} 

そして、「プレゼンター/コントローラー」は次のようになります。

public class DemoPresenter extends BasePresenter { 

   private String title; 

   public DemoPresenter(HttpServletRequest request) { 
       FrameworkModel model = request.getAttribute("frameworkProvidedResourceModel");
       this.title = model.get("title").toUpperCase() + "!!!";
   } 

   public getTitle() { return this.title; } 
}

Presenter obj を JSP/Script で直接使用することと、Presenter がデータを入力する「ロジックのない」ViewModel Bean を返すことについて何か考えはありますか? これの利点は、1 つのプレゼンターで同じリソースのさまざまな「ビュー」 (表示ビュー、編集ビュー、概要ビューなど) を管理できることです。以下は、さまざまなビューを取得する方法の例です。モデル。

/blog/posts/1/show -> ViewModel を次のように取得する JSP を実行します。

<% DemoDefaultViewModel default = new DemoPresenter(request).getViewModel(DemoDefaultViewModel.class); %>

/blog/posts/1/edit -> ViewModel を取得する JSP を次のように実行します。

<% DemoEditViewModel edit = new DemoPresenter(request).getViewModel(DemoEditViewModel.class); %>

無関係な部分が多すぎないシンプルなソリューションを維持したいと思います。また、事前定義された厳密なフレームワーク内で作業しているため、あまり凝ったことはできません。すべてのドメイン ロジックを JSP から、より再利用可能でテスト可能な Java クラスに移動する良い方法を見つけたいだけです。

[1] http://martinfowler.com/eaaDev/PresentationModel.html

4

2 に答える 2

0

多くの MVC フレームワークがあります。たとえば、Struts はフロント コントローラー サーブレットを使用して、使用されるリソースに応じて要求をクラス (コントローラー) にディスパッチします。クラスはリクエストを処理し、結果をビュー (通常は jsp) に送信します。モデルは、データを表す任意のクラスです。参考までに、マップはフレームワークではありません。データを MAP のみとして表現しても機能しますが、見苦しく、維持が困難です。

厳密なフレームワークを知らなくても、ビジネス ロジックを一元化し、どのフレームワークからも独立させておくことは、一般的に受け入れられている良い方法です。フレームワークは配管のみに使用してください。コントローラにプレゼンテーションとビジネス ロジックを仲介させます。これも単なる配管です。表示データを適切なスコープ (ほとんどの場合、リクエスト スコープ) に配置して、例のようにスクリプトレットを用意する必要がないようにします。

于 2012-07-08T10:08:47.810 に答える
0

ストラットをチェックしてください。
古いバージョンしか使用していないことを認めなければなりませんが、「フロントコントローラー」サーブレットのアイデアはあなたが求めているもののようです。これは、共通コードを実行して要求をルーティングするための特別なサーブレットです。
また、Web コンテナーの外部でテストできるアクションもあります。

純粋な JSP から Struts に移行した日は、私の Web 開発人生で最高の日でした。プロジェクトが整理され、管理しやすくなったように感じ始めました。

于 2012-07-08T07:44:04.090 に答える