Model1 与Model2

来源:互联网 发布:centos 输入法 编辑:程序博客网 时间:2024/05/17 22:48

 

在web早期的开发中,通常采用的都是model1。Model1设计模式中,主要分为两层,视图层和模型层。那么,项目中的业务流程该如何处理呢?实际上,model1模式中jsp就充当了这个角色,也就是说一切的业务逻辑都是由jsp来处理的,通常是通过jsp直接调用模型来处理相关的业务,model1是以jsp为中心的。举个例子,比如我们用model1模式开发了一个网站,该网站可以注册会员,那么当我们在注册页面中点击提交时,我们在页面中输入的数据就直接提交给一个jsp对象了,然后由该jsp对象直接调用dao类对象,往数据库中插入一条注册记录,实际上,该jsp对象可以直接就是展示注册页面给我们的jsp。好了,看完例子,我们是否会觉得model1的设计模式在逻辑上比较混乱呢?我想答案是肯定的,要不然也不会引出现在正流行的mvc设计模式了。然而,model1也还是有其自己的优点的。那就是,对于一个小项目而言,采用model1模式来开发,开发效率往往会更高。但是,model1开发模式所带来的问题是,使用该模式开发的项目难以扩展,难以维护,代码重用率也相当低。
    由于现在人对软件质量的要求越来越高,软件项目的规模也越来越大,所以model1设计模式绝对不再适用于现在的软件开发。现在的软件开发是以工程的思想进行的,因此,model2,也就是mvc设计模式,自然而然就受到了人们的追捧了。Model2设计模式,把一个web软件项目分成三层,包括视图层、控制层、模型层。这样的分层思想,不仅提高的代码的重用率、项目的扩展性,而且大大降低了项目的维护成本。此外,model2设计模式的这种分层思想,在逻辑上相当的清晰,易被人们接受,而且便于开发人员的分工合作,因此,大大提升了开发效率。现在,具体谈一下model2的三层结构是如何完成一个业务流层的吧。首先,要先介绍一下,model2中的三层结构都包含了那些内容:视图层包括jsp、html、css、javascript、图片等,控制层由servlet构成,模型层由javaBean构成(包括dao、vo、action等)。其次,对于一个具体的业务请求,这三层结构到底是如何配合完成的呢?举个例子,为了跟model1模式做比较,我们还是引用注册会员的例子。当我们点击注册页面上的提交按钮时,客户端的注册请求不再是传给一个jsp对象了,而是传给了一个servlet对象(控制层,我们定义该servlet对象做为主控servlet,由它来接收所有的业务请求,然后决定交给哪个action对象来处理,最后由它来接收action对象返回的数据并跳转到指定的url),然后由该servlet对象决定将业务请求交给哪个具体的action对象来处理,然后当action对象处理完请求后,便返回一个url给该servlet对象,由该servlet对象根据返回的url决定跳转到哪个页面(即决定将哪个页面展示给客户端)。另外,需要提到的一点就是,刚刚提到的action对象实际上是model2模型中最关键的部分,因为它是model2中真正干活的组件,它解决的是做什么的问题,然后由它通过调用相关的业务组件(模型)来完成相应的业务,业务组件解决的是如何做的问题。对于action对象该划分到控制层还是模型层的问题,其实这是有所争议的。个人比较赞成把它归到控制层中去,因为它实际上并不执行具体的业务,只是调用相关的业务模型对象来处理罢了,换句话说,它不应该包含过多的业务逻辑,而应该只是简单地收集客户端传过来的数据,并将这些数据传给具体的业务处理对象来处理,最后,由它决定跳转到那个url,并由主控servlet执行跳转。确切的来说,我认为它可以理解为是控制层与具体model对象的适配器。

转载自:http://blog.163.com/shanqing_shuixiu@yeah/blog/static/16531922920105282211813/

原创粉丝点击