我试图了解被动视图设计模式如何适用于简单的 Web 应用程序。
有人可以使用以下要求提供此模式的简单示例:
- View 是一个打印 HELLO WORLD 的 JSP!
- 数据以“hello world”的形式保存在数据存储中,检索数据的调用可以是存根
- 为片段(演示者、视图等)提供示例文件,并指出每个文件代表的模式片段。
- 除了 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() %>
我不确定的事情是:
由于 View 不应该知道 Presenter,Presenter 将如何暴露给 View (JSP)。不过,我可能正在混合语义,而 HelloWorldShowModel(充当某种“ViewModel”,是关于 Presenter 的不应该知道的)。
我什至应该有 HelloViewShowModel 抽象,还是应该
getText()
在我的 Presenter 上有一个方法,在 JSP 中调用它来获取请求的文本。如果我对一个资源有多个“视图”(例如 Show、Index、Edit、Summary 等),我应该有多个 Presenter 吗?应该如何打破这个逻辑?从共享演示者继承的多个演示者?每个 Presenter 应该只负责返回一个 ViewModel 吗?
我已经阅读了 Fowlers 的文章以及其他一些文章——问题(对我来说)是它们是在 .NET 应用程序的上下文中编写的,我不明白它们的所有对象是如何连接起来的。
我希望这会减轻我对“懒惰”并寻找“分发”答案的担忧:)