パッシブビューのデザインパターンが単純なWebアプリでどのように機能するかを理解しようとしています。
誰かがこれらの要件を使用してこのパターンの簡単な例を提供できますか?
- Viewは、HELLOWORLDを出力するJSPです。
- データは「helloworld」としてデータストアに保持されます。データを取得するための呼び出しはスタブになる可能性があります
- ピース(プレゼンター、ビューなど)のサンプルファイルを提供し、各ファイルがパターンのどのピースを表すかを示します。
- 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() %>
私が確信していないことは次のとおりです。
ビューはプレゼンターについて知る必要がないため、プレゼンターがビュー(JSP)にどのように公開されるか。ただし、セマンティクスを混合している可能性があります。HelloWorldShowModel(一種の「ViewModel」として機能しているのは、プレゼンターについて知っておくべきことです)。
HelloViewShowModel抽象化を使用する必要がありますか、それとも
getText()
、要求されたテキストを取得するためにJSP内で呼び出されるプレゼンターのメソッドを使用する必要があります。リソースに複数の「ビュー」がある場合(例:表示、索引、編集、要約など)、複数のプレゼンターを用意する必要がありますか?このロジックはどのように分割する必要がありますか?共有プレゼンターから継承する複数のプレゼンター?各プレゼンターは、1つのViewModelのみを返す責任がありますか?
私はファウラーの記事や他の多くの記事を読みました-問題は(私にとって)それらが.NETアプリのコンテキストで書かれていることであり、すべてのオブジェクトがどのように接続されているのか理解できません。
これが私が「怠惰」で「手渡し」の答えを探しているという懸念を和らげることを願っています:)