我一直在阅读很多关于REST的内容,以及如何以"正确的方式"做REST.大多数资源使用RESTful Web服务或RESTful API等术语,但没有提到RESTful网站.鉴于我认为网站和API是两回事,我对此感到困惑.然而,例如,当使用Rails框架设计网站时,您会不断被提醒有关RESTful一切是(或应该是)的.
我认为REST为API提供了许多优势(它的架构属性)(例如JSON API),但我只是看不到网站如何从RESTful中获益.作为一个简单的例子考虑登录功能.在REST方式中,可以通过创建一个会话模型来建模,该模型对应于创建新的sesssion,注销破坏会话等等.URL看起来像这样:
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/login(.:format) sessions#new
user_session POST /users/login(.:format) sessions#create
destroy_user_session DELETE /users/sign_out(.:format) sessions#destroy
Run Code Online (Sandbox Code Playgroud)
但是,这些URL不是非常用户友好.从用户的角度来看,只有一个显示登录表单的/ login路径更有意义.它也更容易记住.但是,如果我们将URL映射为那样,那么它们就不再那么真实了./ login是否识别资源.如果是这样的话?
另一个例子是主页/家庭或只是/.这如何适合REST?在大多数网站上,主页是许多不同类型信息的混搭,并不识别任何单一资源.例如,它可能是一个页面,列出目录中的最新产品以及您登录的最后日期; 两个完全不相关的东西.RESTful怎么样?
我理解为什么将RESTful API与网站分开是有道理的,但我的困惑在于REST如何应用于网站 - 如果它确实如此.
在Passive View Model View Presenter模式中,谁负责显示视图?我找到了其他MVP版本的相关答案,但它们似乎不适用于被动视图版本.
我有一个使用Java Swing的具体示例.它非常简单,但基本上我们有一个SwingCustomersView内部构建带有表(客户列表)的JPanel和一个显示当前所选客户年龄的标签.在表格中选择客户后,演示者将从模型中检索选定的客户年龄.我认为这个例子是MVP被动视图的正确实现,但如果我错了,请纠正我.
问题是我们如何引导这些类?例如,如果我们想要SwingCustomersView在JFrame中显示.如何做到这一点?我想象的是:
void launcher() {
CustomersModel model = new CustomersModel();
SwingCustomersView view = new SwingCustomersView();
CustomersPresenter presenter = new CustomersPresenter(view, model);
}
Run Code Online (Sandbox Code Playgroud)
这是初始接线,但尚未显示任何内容.我们如何实际显示视图?(1)launcher(),(2)SwingCustomersView或(3)是否有责任CustomersPresenter显示视图?不幸的是,我不相信这些都是非常好的,你可以从下面的想法中看到.也许还有另一种方式?
制作SwingCustomersView扩展JFrame,并将其内部JPanel添加到自身的内容窗格中.然后我们可以这样做:
void launcher() {
CustomersModel model = new CustomersModel();
SwingCustomersView view = new SwingCustomersView();
CustomersPresenter presenter = new CustomersPresenter(view, model);
view.setVisible(true); // Displays the view
}
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下,我们不会将presenter实例用于任何事情.这不奇怪吗?它只是用于布线,我们也可以删除变量而只是做new CustomersPresenter(view, model).
请SwingCustomersView拿一个Container …