使用Spring设计和实现Web应用程序 开发指引(二)

翻译自 http://spring.io/guides/tutorials/web/1/

首发于 http://my.oschina.net/u/179755/blog/232779。


1步:核心和Web域建模

对于我们的Yummy面馆Web前端的第一版而言,重点部分是查看菜单和创建监控订单。

人们很容易将核心订单域暴露给外部世界,并从那里开始构建,但是这样将忽略核心和Web域之间的边界,从而导致内部应用结构驱动Web前端,因此而与内部结构耦合。

我们需要向用户暴露的那部分用户可见前端(Web域)需要以某种对这些用户友好的速率持续改进。核心域需要以适应Yummy面馆系统需求内部演进的速率来演进。这两个域之间由于它们演进的速率的不同,可能存在潜在的冲突。

为了管理这种冲突,我们需要在Web域创建它特有的概念和组件,这些组件能够以Web域的演进速率来演进。这可能会导致拥有跟核心域相似的组件类型,但是因为它们的目的是如此的不同,相似之处是表面的。

在核心域,概念作为应用程序域的内部通用语言部分捕捉出来。在Web域,概念仅仅只是作为暴露公共Web前端的目的而存在。

Yummy面馆的核心应用程序域组件

使用Spring设计和实现Web应用程序 开发指引(二)

打开初始项目,在src/main/java/com/yummynoodlebar/core/domain下,我们将发现核心组件,以及Yummy面馆的应用程序内部域。

  1. Customer。用户名,地址,订单发送的联系名。

  2. Order。系统中的一个订单,关联了状态,以及状态历史以跟踪。

  3. OrderStatus。订单的当前状态。

本教程重点介绍订单域类,com.yummynoodlebar.events.orders中的事件类可以作用在这些订单域类上。

在这种情况下,事件类起到了解耦的作用,将域概念从多变的集成域(这些集成域需要访问核心并在其上工作)和Yummy面馆应用程序核心分离出来。

我们将为Web使用的订单事件类包括

  1. CreateOrderEventOrderCreatedEvent。用于请求新建订单及其完成确认。

  2. RequestOrderDetailsEventOrderDetailsEvent。用于请求订单详情及其应答。

  3. RequestOrderStatusEventOrderStatusEvent。用于请求订单当前状态及其应答。

 

用户交互建模

当我们构建Web应用程序的时候,我们是为人类构建。这看起来很明显,但是它对我们的Web域的设计和建模有很大的影响。

最重要的:

  1. 用户希望能再次访问任何他们之前看过的URL。这些URL很大可能将被拷贝和粘贴。

  2. 用户希望能随意访问网站。

  3. 用户希望能随意使用浏览器的前进和后退按钮。

  4. 来自HTML表单的HTTP GETPOST的用户体验是截然不同的。POST只能用于提交(submit)信息,而不是导航。

基于上点:

  1. 我们的URL应该是独立的,服务器能够从URL中重新构建整个网页。

  2. 我们应该提供相关页面的链接,而不是试图限制用户进入一个特定的流程。

对于Yummy面馆而言,用户需要:

  1. 查看菜单

  2. 从订单蓝中增加或者移除物品

  3. 发送订单给厨房

  4. 查看订单的进度

 

设计我们的URL

下面的URL将以用户能够容易使用和返回的方式给出功能:

ACTION

URL

显示菜单列表

GET   “/”

从蓝中增加菜单项并重定向到/

POST   “/addToBasket?menuId={menuId}”

从蓝中移除菜单项并重定向到/showBasket

POST “removeFromBasket?menuId={menuId}”

显示当前蓝

GET   “/showBasket”

收集客户信息表单,提交到/doCheckout

GET “/checkout”

从当前蓝中创建订单,重定向到”/order/{id}”

POST   “/doCheckout”

查看指定订单的状态

GET “/order/{id}”

请注意,每个POST 结束后都将立即重定向到另一个URL。这允许用户在POST完成后随时手工刷新网页,而不用双重提交。

 

URI模板

上面的URI被表达成模板,它们包含了{}

例如,这里{}表明了订单号为1的情形:

http://www.yummynoodlebar.com/order/1

订单号为37的有如下的URI

http://www.yummynoodlebar.com/order/37


Model View Controller(MVC)

MVC是一个在用户接口开发中非常流行的架构设计,不管是桌面还是Web。它定义了UI中的三种主要责任体,指定了它们之间怎么交互。

这种分离允许以更加可伸缩和可测试的方式来构建应用。

  1. ControllerContoller主要负责接收用户输入,产生数据模型,然后选择一个视图以展现这个模型。在Spring MVC中,它是带有@Controller 标记的类,这个类中有@RequestMapping标记的方法用于处理一个特定的用户输入。

  2. ModelModel用来提供给视图,它包含了所有的信息以展现给用户。在Spring MVC中,用Model类表示。很多时候这个类并不可见,而是从Controller方法返回的信息中生成出来。

  3. ViewView主要用来展示信息给用户。在Web中,View组件将产生HTML,也可能还包含JavaScriptSpring MVC中的View可以有很多形式,而在这个教程中,所有的View将用Thymeleaf来开发。


总结

祝贺。我们已经决定了URL和他们之间的链接。同时捕获了这些组件:

使用Spring设计和实现Web应用程序 开发指引(二)


下一步:实现URL和返回数据

 


你可能感兴趣的:(spring,Web,mvc,应用程序,开发指引)