`
明日天涯
  • 浏览: 35459 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

浅谈model1与model2

阅读更多
    在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对象的适配器。
0
0
分享到:
评论

相关推荐

    浅谈keras通过model.fit_generator训练模型(节省内存)

    前言 前段时间在训练模型的时候,发现当训练集的数量过大,并且输入的图片维度过大时,很容易就超内存了,举个简单例子,如果我们有20000个样本,输入图片的维度是224x224x3,用float32存储,那么如果我们一次性将...1

    浅谈django model postgres的json字段编码问题

    下面小编就为大家分享一篇浅谈django model postgres的json字段编码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    浅谈django model的get和filter方法的区别(必看篇)

    下面小编就为大家带来一篇浅谈django model的get和filter方法的区别(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    浅谈 Vue v-model指令的实现原理

    vue的v-model是一个十分强大的指令,它可以自动让原生表单组件的值自动和你选择的值绑定, 我们来看一下它的效果: 输入框的值和一个数据是绑定的,输入框的值变化,和他绑定的值也会发生变化 我们可以参照官方文档的例子...

    浅谈基于Struts和Hibernate的J2EE应用

    Sun公司在jsp早期制定了两种规范,称为model1和 model2。 Model 1 以JSP为中心的开发模型。在JSP页面中同时实现显示、业务逻辑和流程控制,从而可以快速地完成应用开发。适于小项目的开发。 不利于应用...

    浅谈vue中关于checkbox数据绑定v-model指令的个人理解

    主要介绍了浅谈vue中关于checkbox数据绑定v-model指令的个人理解,v-model用于表单的数据绑定很常见,下面就来详细的介绍一下

    浅谈iOS中MVVM的架构设计与团队协作

    转载他人的,Model层是少不了的了,我们得有东西充当DTO(数据传输对象),当然,用字典也是可以的,编程么,要灵活一些。Model层是比较薄的一层,如果学过Java的小伙伴的话,对JavaBean应该不陌生吧。 ViewModel层,...

    浅谈Agent移动数据库模型

    Abstract: The traditional C/S model is not satisfied by the customers because of the characteristic of the mobile computational environment. Nowadays much attention has been paid on the Mobile Agent. ...

    浅谈python-Django

    作为Web框架,Django基于MVT分为三大块,模型model,视图view,模板template。模型Model:负责与数据库交互;视图View:接收请求,逻辑处理,调用数据,输出响应给html;模板template:将页面展现给用户

    浅谈MVP.doc

    WPF的数据绑定与Presentation Model相集合是非常好的做法,使得开发人员可以将View和逻辑分离出来,但这种数据绑定技术非常简单实用,也是WPF所特有的,所以我们又称之为Model-View-ViewModel (MVVM)。

    浅谈MBT基于模型的测试技术

    如果你在互联网上搜索“Model-BasedTesting”(即基于模型的测试,简称MBT),你将发现大量的信息。基于模型的测试并不是一个新生事物,也不局限于SpecExplorer这一工具,而是一个在学术界和工业界都已存在多年的...

    浅谈Vue.js 关于页面加载完成后执行一个方法的问题

    2.直接在本页面监视一个参数,发现参数被初始化了,说明页面也已经加载完成,因为你的页面用到了这个参数。 方法1案例:tab页里的子页面如果没有内容就隐藏 父页面代码 <el v-model=initTab type=card> <el-...

    浅谈TDOA&FDOA卫星干扰源定位原理

    TLS Model 2000系统定位原理是当被干扰卫星受到干扰时,我们可在与其轨道位置邻近的卫星中选择一颗类型相同的卫星,选择的邻星不是唯一的,选择时需注意的几个关键因素将在后面介绍。由于干扰源必定有一定的旁瓣泄漏...

    浅谈关于iview表单验证的问题

    关于iview表单验证的问题 ...第五步:在操作保存按钮时,添加方法,对整个表单进行校验,参数为检验完的回调,会返回一个 Boolean 表示成功与失败。 <Form :label-width=100 ref='contractForm' :model='con

    浅谈keras.callbacks设置模型保存策略

    主要介绍了浅谈keras.callbacks设置模型保存策略,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics