页面控制多角度看Model1与Model2
在写这篇文章之前,xxx已经写过了几篇关于改页面控制主题的文章,想要了解的朋友可以去翻一下之前的文章
Model1与Model2就是jsp+javabean和jsp+servlet+javabean两种模式,前者属于纯jsp开发,后者是简略的MVC。它们是sun公司前后提出的两种MVC模式的规范。
概念介绍:
Model1,分为视图层与模型层。jsp充当了很重的角色:担任页面显示、调用模型处理业务逻辑、控制页面跳转。模型层就是javabean,担任处理业务逻辑。
Model2,也就是MVC设计模式,是基于Model1的进一步改进。从Model1中的视图层中分理出控制,也就是Model2的模式.MVC分为M、V、C三层。
M(Model)模型,就是javabean,重要职责就是处理业务逻辑;
V(View)视图,重要担任页面显示;
C(Controller)控制,担任取得表单数据、调用业务逻辑、转发或重定向到页面。
架构分析:
在Model1中,jsp担任的职责太重,并且将显示、部份逻辑与控制耦合在一起,不利于大型开发与后期的系统维护。同时jsp页面里头既有html标签,也有java代码。这有形中就对程序员提高了要求。美工处理页面时,时不时瞥见一下java代码,显得不三不四;而编写java代码的须要看大量的html标签,不利于合作开发。
Model2将控制(Servlet)从jsp页面中分离出来,jsp做的只是页面渲染,通过应用JSTL标签,可以将动态的信息以标签的形式显示在页面上。这样,jsp的职责就单一了,只担任页面显示,便与合作开发,分工合作。
而控制层的Servlet去停止逻辑调用、控制页面转向。
Model1和Model2都有模型层。模型层重要是javabean,停止业务逻辑处理,这里的业务逻辑包括具体的业务再现和持久化逻辑。这里可以对Model停止细化:将持久化逻辑独立出来,也就是三层架构的思想;可以再建立接口层,实现都依赖于抽象,而不依赖于具体实现,也就是工厂或者抽象工厂+反射。
谈到分层划分,这里又触及到一个粒度划分的问题:Model层中的Manager逻辑是与dao层对应还是与页面对应。如果页面逻辑简略的话,就没有这个问题了,因为他都是对应的;如果页面逻辑比较担任,上面举个例子:
当初dao层有物料管理和流向单管理两个dao部份。假如Manager层中如果与dao层对应,那么就应该有两个Manager,即物料管理Manager和流向单管理Manger两部份,如果页面须要这两部份的信息,在一个控制里头,就须要调用这两个Manager;
假如Manager与页面逻辑相对应,那么在控制里头只须要调用一个某某Manager就可以了。而在这个Manager中就会调用dao层的两部份逻辑。
个人认为,比较好的设计,是两种设计的结合。dao层也参加简略的业务逻辑,不过粒度须要掌握,业务逻辑越多,通用性越差;Manger层也不应该与dao层完全一一对应,假如dao层当初又有流向单具体信息管理,那么流向单的Manager只需一个方法与之对应便可。也就是说这个方法中包含了流向单信息和流向单具体信息两部份信息。
另外,我还有一个疑难:一个控制频繁调用多个Manager是不是合适?
多个Manager的组合调用,是复用的表现;然后多个Manager的组合,原来就是业务逻辑,控制中触及太多的业务逻辑,总感觉不太好。此中取舍,在项目中实际吧。
从jsp和Servlet角度分析:
一个Servlet就是一个Java类,它被用来扩展服务器的性能,服务器驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然Servlet可以对任何类型的请求产生响应,但平日只用来扩展Web服务器的应用程序。Java Servlet技术为这些应用程序定义了一个特定的HTTP的Servlet类。
那jsp呢?jsp就是Servlet。jsp也是在服务器运行的,每个jsp都会在tomcat容器下响应路径里生成对应的Servlet,在这个Servlet里头,会将jsp页面上的静态内容和动态内容分离打印出来。每一次用户请求,tomcat都会将页面重新发送回浏览器。
既然jsp就是Servlet,那么还有必要引入MVC,停止分离控制吗?
答案无疑是肯定的,分离控制有莫大的好处。jsp虽然在服务器执行,但是里头可以全部是便签,美工职员完全可以看懂。即便是不懂jsp的职员,能看懂html标签,培训两天就可以停止开发。而控制层的Servlet全是Java代码,实现了显示逻辑与控制逻辑的分离。同时,分离控制,彼此之间职责清晰,有利于分工合作,便于后期维护。
从需求角度分析:
需求就意味着变更,我认为“活软件”重要包括两方面:
1、用户用着顺手,容错性好;
2、程序设计灵活,便于修改。
对于Model1来说,开发费用会小一些,但面对需求变更,业务修改,明显非常乏力;而Model2可以较好的面对需求变更。不过面对大量的需求变化,我们可以基于Model2,停止进一步的分层设计,层与层之间依赖抽象,而不依赖于具体实现。需求变更时,做到修改最小化,费用最小化。
总结:
个人认为:Model1已经不能适应社会的开展了,而我们的开发也会将在Model2的基础上停止扩展,做出更加灵活,更加利于修改的设计。
文章结束给大家分享下程序员的一些笑话语录:
IBM和波音777
波音777是有史以来第一架完全在电脑虚拟现实中设计制造的飞机,所用的设备完全由IBM公司所提供。试飞前,波音公司的总裁非常热情的邀请IBM的技术主管去参加试飞,可那位主管却说道:“啊,非常荣幸,可惜那天是我妻子的生日,So..”..
波音公司的总载一听就生气了:“胆小鬼,我还没告诉你试飞的日期呢!”
---------------------------------
原创文章 By
页面和控制
---------------------------------