服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

web 应用程序模型及其java实现之第三部分


  第三部分:mvcd模型

  在上一节中,从一般的原则上介绍了两种web应用模型,但是如何理解和把握这样的模型,将不同的web技术正确应用到web程序不同的功能模块中是一个非常实际的话题。下面就在实际编程中如何去掌握web编程模型做一些分析。

  1、两层客户/服务器模型

  web应用程序天生是一种客户/服务器应用程序,在asp(application service provider)逐渐成为internet应用发展的一个重要方向的时候,使用哪一种编程模型来实现web应用程序还处于探索之中。上面介绍的微软的dna结构和java编程结构就是人们在asp(application service provider)编程模型上进行探索的结果,但是由于这些技术出现比较新、掌握起来也有一些难度,所以许多编程人员采用了使用asp或是jsp中嵌入“sql”来实现数据存取和一些相关逻辑,如图11所示。

  这样的编程模型有对一些小型系统比较合适,因为不需要太复杂的技术,技术人员比较好找,实现起来也比较快。但是,这种编程模型缺点还是比较明显的:维护困难、重用困难、大型系统中难以管理。

  要解决该模型问题的关键是,将逻辑层抽象出来。但是,在以数据中心编程中,数据库不但提供基本的数据存取功能,而且与sql丰富的表达能力一起提供强大的逻辑表达能力;再上节介绍的图9、图10所示两种模型掌握起来有一些难度,所以出现了该模型的一个改良版本。


  组成在该改良的模型中,为数据库中的主要的表都建立了一个类,jsp/asp通过该类实现对数据库表的操作。这个模型一个方面实现了sql语句封装,方便了程序的维护;另一个方面也提高了系统的重用性,即对table类的重用。

  但是,由于大多数数据库操作都是针对多数据表的操作,如果采用单表的方式来完成逻辑,未免有些浪费数据库与sql的逻辑功能。另外,由于系统没有实现逻辑层的抽象,不能解决上面提高关键问题。

  2、mvc模型的介绍

  在传统的面向对象编程中,我们曾经接触过mvc模型。

  在该模型中,应用程序分为三个组成部分:

  view: 这是用户界面部分,与web应用程序一样,主管应用程序与人之间的接口:一个方面它为用户提供了输入手段,并触发应用逻辑运行;另一个方面,它又将逻辑运行的结果以某种形式显示给用户。

  controller: 该部分是用户界面与model的接口;一个方面它解释来自于view的输入,将其解释成立系统能够理解的对象,同时它也识别用户动作,并将其解释对model特定方法的调用;另一个方面,它也处理来自于model的事件和model逻辑执行的结果,调用适当view为用户提供反馈。

  model: 这是整个模型的核心,它表示的是解决方案空间的真正的逻辑。它采用面向对象的方法,将问题领域中的对象抽象为应用程序对象。在这些抽象的对象中封装了对象的属性和这些对象所隐含的逻辑。

  上面所示的编程模型中,在应用程序执行过程中,数据就保存在model的实例中,也就是保存在内存中。当用户需要保存执行的结果时,将模型中的数据保存为特定格式的文件。在用java实现模型时,可以直接使用java对象的serializable特性来保存对象。这种模型适合一些工具软件的开发,如case工具或是cad工具。这些工具软件所具有一个共同特征是模型本身比较复杂、数据量不大而且是单用户单模型实例操作。

  web应用程序有着与工具类应用程序不同的特点:数据量大、多用户并行操着。如果象上面一样采用面向对象模型,则往往是多模型实例同时存在,上面的模型不再适合于这样的web应用程序。

  虽然mvc模型不适用于web应用,但是它为web应用程序的开发提供了一些借鉴意义。再该模型中提供了对模型的抽象,也就是逻辑的抽象。如果改良该模型,在内存中不保留对象的属性值,并且增加一个数据层,将模型与数据库连接起来,可能是一个好办法。

  如何用java实现图14所示的mvcd模型

  3、wcs、mpe模型介绍

  图15所示的是在wcs和mpe中所采用的编程模型。该编程模型将jsp、servlet、javabean和jdbc技术有机的结合在一起,基本上实现了图14所示的mvcd模型。

  jsp:jsp在本模型中主要起着用户界面的功能,掌管所有的输入和输出。在该部分中所使用的技术包括。

  html:用户从浏览器上所看见的内容主要是以html的形式提供的,只是有一些内容是静态的,而有一些内容是由jsp动态产生的。

  applet:这是一种客户端程序技术,它作为一种可以独立运行的程序模块嵌入到html中。

  java script:这里的java script指的是客户端脚本技术,主要在客户端提供一些动态功能和实现输入格式的检查。

  jsp:这是一种在服务器端执行的脚本技术,它的主要功能是接受服务器端逻辑运算的结果,动态的生成html作为对浏览器端请求的响应。

  ic (interaction controller):ic是以servlet技术实现的。ic是介于事务逻辑和用户界面之间的一个层次,该层主要起用户界面和事务逻辑之间的枢纽作用。从jsp上接受的用户输入,因为是以http请求的形式发送到服务器端,该http请求的具体内容是什么、它提供了哪些参数需要在服务器端进行解析,然后才能决定为了响应该请求要执行什么事务逻辑;事务逻辑在执行完成之后,作为对某个用户请求的响应,它需要将执行的结果以http响应的形式发送到客户端。ic正是起着上面所示的两种作用的程序单元,它一个方面响应来自于jsp的请求,并将其解释为制定的command调用;另一个方面它将command执行的结果传递给特定的jsp并调用该jsp作为给用户的响应。

  command:command是以javabeans技术实现的。在一个应用程序中,比较稳定且起着核心作用的是事务逻辑,而command就是用来实现事务逻辑的。在这样的web应用程序中,将系统的事务逻辑封装成许多独立的 command,这些command一个方面作为对ic的响应,另一个方面它完成了逻辑与数据库对象po的结合。

  po:这是一个特殊的java class,它在该模型中起着应用与数据库之间的桥梁作用。web应用程序大多都有丰富的数据,都需要与数据库进行连接。command对数据库进行调用所需的基本功能都封装在po中。

  databean:如图所示,jsp、ic、command与po之间是一种功能提供者与调用者之间的关系,那么如何传递参数呢。databean便是这样的一个解决方案,它将这些功能模块间传递的参数抽象成对象。

  4、对jicpd模型的改进(jimpd)

  在图15所示的模型中,系统抽象出了逻辑层,即command层。但是,系统并没有将其所有的command和databean有机的整合起来,即开发者看不见一个完整的对象模型,我认为这对面向对象的开发是一个损失。因为,如果一个好的面向对象模型,不但为数据库的设计提供依据,而其也为command的设计和组织提供了一个依据,并且也将数据库与command的关系完整的表达出来。所以提高该模型性能的关键就是增加一个模型层,将command与databean封装在模型中。

扫描关注微信公众号