4.企业应用架构模式 --- Web表现层

	一个单独的web服务器能够处理很多种类的程序。这些应用程序可以是动态的,把它们放置到适当的目录下就可以加载到服务器。web服务器的工作是:解释请求方的
  URL并调用服务器端应用程序来处理这些请求消息。构建web服务器上应用程序的方法主要是有两种:一种是使用脚本,另一种是使用服务器页面。
  	脚本形式是一个程序,通常,调用函数或方法来处理http的请求调用。如CGI脚本和Java servlet。程序文本可以很好的完成一个程序可以做的任何事情,并且脚本
  可以分解成多个子程序,还可以创建和使用其他服务。通过检查http请求对象,可以从web网页中获得数据,这里的http请求对象是一个字符串。在一些环境中,可以
  通过对请求字符串进行正则表达式搜索获得数据。另外一些平台(如java servlet),通过为开发人员解析来获得数据,它允许开发人员通过关键字接口从请求中获得信息。
  这至少意味着开发人员可以处理不太规范的表达式。web服务器方的输出是另一个字符串---响应,脚本通过程序语言中常用的write stream操作输出这个字符串。

  	通过流命令来编写html的响应对于程序员来说不太舒服,对于那些非程序员来说几乎不可能。这就产生了服务器页面的思想,在服务器页面中,我们把程序和返回的文本
  组合在一起。可以在html中编写返回页面,并且把脚本代码插入其中,使它在某个地方执行。如PHP。
  	在仅需要对响应进行少量的处理时,服务器页面可以工作的很好。
  	因为脚本方式非常适合于解释请求消息,服务器页面非常适合于格式化应答消息,所以,应该使用脚本语言来解释请求消息,用服务器页面来格式化应答消息。这种用法的
  分离事实上是一个老观点,它首次出现在使用 模型---视图---控制器 模式的用户界面中。'把非表现层逻辑剥离出来'。
  	更喜欢用'输入控制器'来替代 模型---视图---控制器 中的控制器。
  	一条消息进入输入控制器,输入控制器从中得到消息。它随后把业务逻辑传递给一个合适的模型对象。这个模型对象和数据源交互,并且按照请求消息的要求进行处理,应答
  并收集信息。当做完这些后,它再把控制器交给输入控制器,输入控制器察看结果并且决定采用什么样的视图来显示应答消息。输入控制器不是直接传递给视图,通常,这是一个
  包括把数据放在某种http会话对象中合适位置的过程,这个http会话对象在输入控制器和视图之间共享。
  	这也是最重要的使用 模型---视图---控制器 的理由是要保证模型和web表现层的完全分离。这使得修改表现层以及加入其它的表现层会很容易。同样,把处理过程放到分离的
  事务脚本或分离的领域模型对象中也会使得它们容易测试。

  	这里我们看看'控制器'的第二种用法。许多用户界面设计通过应用控制器对象的中间过渡层来分离表现层和领域对象。应用控制器的目的是处理应用程序流,决定视图应该按什么
  次序出现。它可能表现为表现层的一部分,或者也可以把它当成一个在表现层和领域层之间作为中介的隔离层。应用控制器可能独立于任何特定的表现层,在这种情况下,它们能在
  表现层之间重复使用。如果不同的表现层共用相同的基本流和导航,通常没有什么问题,不过最好给每个不同的表现层一个不同的流。
  	并不是所有的系统都需要应用控制器。如果你的系统在屏幕的次序和屏幕之间的导航上有丰富的逻辑关系,那么这些应用控制器非常有用。如果你的网页与领域上的行为没有一个
  简单映射,则这个应用控制器也很有用。但是,如果有人可以很好的以任何次序观看任何屏幕,你就不需要控制器了。

1.视图模式
	在视图方面,可以考虑三种模式:转换视图,模本视图和两步视图。这就带来了两种选择:第一,使用转换视图还是模板视图;第二,无论使用哪一种,使用一个阶段,还是两步
  视图。转换视图和模板视图的基本模式还是单阶段的,但也可以把两步视图应用于它们其中任何一个。
  	首先,在转换视图和模板视图之间进行选择。模板视图允许你在网页的结构中编写表现层,并允许在网页中嵌入标签,用以指明网页中的动态内容需要导向哪里。不少流行的平台
  都基于这种模式,它们允许你在网页中输入程序语言代码。这种方式提供了强大的功能和灵活性,但是,也会导致代码的混乱难以维护。一种解决办法是:在使用服务器页面技术时,
  必须非常小心使程序的逻辑独立于网页的结构(通常使用一个辅助对象)。
  	转换视图使用程序的一种转换风格。常见的例子如XSLT。如果领域数据是以xml格式存在的,或者很容易转换成这种格式,那么使用转换视图将是非常有效的。
  	如果使用程序脚本作为视图,可以在转换视图,模板视图或者两者的结合方式中编写代码。
  	其次,要决定是选择单阶视图还是选择两步视图。第一种方式通常在应用程序中为每个屏幕都准备一个视图组件。视图提取领域数据并把它放回到html网页中。这里,'通常'是指
  类似的逻辑屏幕还是可以共享同一个视图的。
  	两阶视图把这一过程分解成两个阶段:由领域数据产生一个逻辑屏幕,然后把它发送到html网页中。其中,每个屏幕都有一个第一阶段的视图,而整个程序中只有一个第二阶段的
  视图。
  	两步视图的优点是它可以决定把什么样的html网页用在一个地方。这使得全局改变html网页变得容易,因为如果要改变每个屏幕的内容,只需对一个目标对象进行修改。当然,
  如果逻辑表现层是一样的,它仅仅能带给你这些好处,因此当不同位置的屏幕使用相同的基本设计时,它可以很好的工作。
  	如果web应用程序提供的服务是由多种前端用户来使用,那么运用两步视图将更加得心应手。类似的,还可以使用两步视图来处理不同的输出设备。例如,可以用不同的第二阶段区分
  web浏览器或者掌上电脑。

2.输入控制器模式
	输入控制器有两种模式。为web站点上的每一个页面都准备一个输入控制器时一种最常用的模式。在最简单的情况下,这个页面控制器可能就是一个包含视图功能和输入控制器功能的
  服务器页面本身。在许多实现中,将输入控制器分离成单独的对象。输入控制器再创建适当的对象来完成处理,并实例化适当的视图来返回结果。通常情况下,在页面控制器和视图之间
  并没有完全的一一对应。更为准确的观点是:为每一个动作准备一个页面控制器,这个动作可能是一个按钮动作或者是一个链接。在大部分的时间里,动作和显示的页面相对应,但偶尔
  也不是。
  	任何输入控制器都有两个责任----处理http的请求消息,根据请求的消息来决定下一步做什么---把它们分开是很有意义的。一个服务器页面可以处理请求消息,使用一个分离的辅助
  对象来决定下一步做什么。前端控制器则是把这种分离的思想惯窃的更加彻底一些,它通过单个对象处理所有的请求消息。这一单一的处理程序解释url来计算出它正在处理哪种类型的
  请求消息,然后创建一个分离的对象来处理它。通过这种方法,可以用一个单一的对象处理所有的http页面。这一,当站点行为结构有所改变的时候,就可以避免重新配置web服务器了。

https://juejin.im/post/5c4c6688f265da615064ceaa

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值