4

パッシブビューのデザインパターンが単純なWebアプリでどのように機能するかを理解しようとしています。

誰かがこれらの要件を使用してこのパターンの簡単な例を提供できますか?

  1. Viewは、HELLOWORLDを出力するJSPです。
  2. データは「helloworld」としてデータストアに保持されます。データを取得するための呼び出しはスタブになる可能性があります
  3. ピース(プレゼンター、ビューなど)のサンプルファイルを提供し、各ファイルがパターンのどのピースを表すかを示します。
  4. jstl / el(オプション)以外のフレームワーク/DSLは使用しないでください

ありがとう

更新1:これがどのように構造化されるかについての私の理解を追加します。

// プレゼンター; 特定のビューの複数の「レンディション」(表示、索引付け、編集、要約など)を担当します

public class HelloWorldPresenter {
     private HttpServletRequest request;
     private DataStore dateStore;

     public HelloWorldPresenter(HttpServletRequest request) { 
        this.request = request;
        this.dataStore = DataStoreUtil.getDataStore(request); 
        // Do a bunch of other inits that all getXXXModels() will use
     } 

     public getShowModel() {
        HelloWorldShowModel model = new HelloWorldShowModel();         
        String tmp = makeLoud(this.dataStore.getMyData()); // Stub method          

        model.setText(tmp);
        return model;
     }

     private String makeLoud(String str) {
        return str.toUpperCase() + "!";
     } 
}

//ビューで使用されるモデル

public class HelloWorldShowModel { 
   private String text;
   public getText() { return this.text };
   public setText(String text) { this.text = text; }
}

//show.jspを表示します

<c:set var="model" value="new HelloWorldPresenter.getShowModel()"/>
${model.text} -> HELLO WORLD!

また

<% HelloWorldShowModel model = new HelloWorldPresenter(request).getShowModel() %>
<%= model.getText() %>

私が確信していないことは次のとおりです。

  1. ビューはプレゼンターについて知る必要がないため、プレゼンターがビュー(JSP)にどのように公開されるか。ただし、セマンティクスを混合している可能性があります。HelloWorldShowModel(一種の「ViewModel」として機能しているのは、プレゼンターについて知っておくべきことです)。

    1. HelloViewShowModel抽象化を使用する必要がありますか、それともgetText()、要求されたテキストを取得するためにJSP内で呼び出されるプレゼンターのメソッドを使用する必要があります。

    2. リソースに複数の「ビュー」がある場合(例:表示、索引、編集、要約など)、複数のプレゼンターを用意する必要がありますか?このロジックはどのように分割する必要がありますか?共有プレゼンターから継承する複数のプレゼンター?各プレゼンターは、1つのViewModelのみを返す責任がありますか?

私はファウラーの記事や他の多くの記事を読みました-問題は(私にとって)それらが.NETアプリのコンテキストで書かれていることであり、すべてのオブジェクトがどのように接続されているのか理解できません。

これが私が「怠惰」で「手渡し」の答えを探しているという懸念を和らげることを願っています:)

4

2 に答える 2

2

あなたが述べた要件では、パターンを実装できないと思います。ビューを JSP と見なす場合、コントローラーが UI コンポーネントの値をアクティブに設定できる手段はありません。(私にとっては、これがパターンの核心です。コントローラーは、実際には入力/出力 UI コンポーネントの値を設定することによってビューをアクティブに更新します。その逆ではありません (モデル オブジェクトからフィールドを取得するビュー)。これは、次の方法では実行できません。 JSPとしての上記の手法には、この方法でアクセスする手段がありません。

ただし、Javascript に基づく Web 環境で実装することはできます。ビューが DOM であり、コントローラーが Javascript コンポーネントであると考えてください。JS コントローラーには DOM への直接書き込みアクセス権があるため、パターンが示すように単一のフィールドをアクティブに更新できます。モデルを更新/取得するために、JS コントローラーは、たとえば Ajax を介した REST API に基づいてサーバー側システムと通信できます。

于 2012-07-14T17:38:03.077 に答える
1

JSP のような単純なテンプレート ソリューションを使用して、すべてのロジックをコントローラにオフロードすることはできません。少なくとも実際のケースではそうです。JSFならこんなことができると思います。

物事がどのように行われるかについて知りたい場合は、Spring MVC をご覧になることをお勧めします。ソースコードは多くのことを教えてくれます。

于 2012-07-17T12:56:59.053 に答える