Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16496391
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:37:49

下载本文示例代码
  第三部分:MVCD模型   在上一节中,从一般的原则上介绍了两种Web应用模型,但是如何理解和把握这样的模型,将不同的Web技术正确应用到Web程序不同的功能模块中是一个非常实际的话题。下面就在实际编程中如何去掌握Web编程模型做一些分析。  1、两层客户/服务器模型图11、两层客户/服务器模型  Web应用程序天生是一种客户/服务器应用程序,在ASP(Application Service Provider)逐渐成为Internet应用发展的一个重要方向的时候,使用哪一种编程模型来实现Web应用程序还处于探索之中。上面介绍的微软的DNA结构和Java编程结构就是人们在ASP(Application Service Provider)编程模型上进行探索的结果,但是由于这些技术出现比较新、掌握起来也有一些难度,所以许多编程人员采用了使用ASP或是JSP中嵌入“SQL”来实现数据存取和一些相关逻辑,如图11所示。  这样的编程模型有对一些小型系统比较合适,因为不需要太复杂的技术,技术人员比较好找,实现起来也比较快。但是,这种编程模型缺点还是比较明显的:维护困难、重用困难、大型系统中难以管理。  要解决该模型问题的关键是,将逻辑层抽象出来。但是,在以数据中心编程中,数据库不但提供基本的数据存取功能,而且与SQL丰富的表达能力一起提供强大的逻辑表达能力;再上节介绍的图9、图10所示两种模型掌握起来有一些难度,所以出现了该模型的一个改良版本,如图12所示。 图12、改良的客户/服务器模型  组成在该改良的模型中,为数据库中的主要的表都建立了一个类,JSP/ASP通过该类实现对数据库表的操作。这个模型一个方面实现了SQL语句封装,方便了程序的维护;另一个方面也提高了系统的重用性,即对Table类的重用。  但是,由于大多数数据库操作都是针对多数据表的操作,如果采用单表的方式来完成逻辑,未免有些浪费数据库与SQL的逻辑功能。另外,由于系统没有实现逻辑层的抽象,不能解决上面提高关键问题。  2、MVC模型的介绍  在传统的面向对象编程中,我们曾经接触过MVC模型,如图12所示。图13、MVC模型  在该模型中,应用程序分为三个组成部分:  View: 这是用户界面部分,与Web应用程序一样,主管应用程序与人之间的接口:一个方面它为用户提供了输入手段,并触发应用逻辑运行;另一个方面,它又将逻辑运行的结果以某种形式显示给用户。   Controller: 该部分是用户界面与Model的接口;一个方面它解释来自于view的输入,将其解释成立系统能够理解的对象,同时它也识别用户动作,并将其解释对Model特定方法的调用;另一个方面,它也处理来自于Model的事件和Model逻辑执行的结果,调用适当View为用户提供反馈。   Model: 这是整个模型的核心,它表示的是解决方案空间的真正的逻辑。它采用面向对象的方法,将问题领域中的对象抽象为应用程序对象。在这些抽象的对象中封装了对象的属性和这些对象所隐含的逻辑。   上面所示的编程模型中,在应用程序执行过程中,数据就保存在Model的实例中,也就是保存在内存中。当用户需要保存执行的结果时,将模型中的数据保存为特定格式的文件。在用Java实现模型时,可以直接使用Java对象的Serializable特性来保存对象。这种模型适合一些工具软件的开发,如Case工具或是CAD工具。这些工具软件所具有一个共同特征是模型本身比较复杂、数据量不大而且是单用户单模型实例操作。  Web应用程序有着与工具类应用程序不同的特点:数据量大、多用户并行操着。如果象上面一样采用面向对象模型,则往往是多模型实例同时存在,上面的模型不再适合于这样的Web应用程序。  虽然MVC模型不适用于Web应用,但是它为Web应用程序的开发提供了一些借鉴意义。再该模型中提供了对模型的抽象,也就是逻辑的抽象。如果改良该模型,在内存中不保留对象的属性值,并且增加一个数据层,将模型与数据库连接起来,可能是一个好办法,如图14所示。图14、调整后的MVC模型(MVCD:Model_View_Control_Data)  如何用Java实现图14所示的MVCD模型  3、WCS、MPE模型介绍  图15所示的是在WCS和MPE中所采用的编程模型。该编程模型将JSP、Servlet、JavaBean和JDBC技术有机的结合在一起,基本上实现了图14所示的MVCD模型。图15、JICPD(JSP_IC_COMMAND_PO_DATA)模型  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封装在模型中,如图16所示。图16、JIMPD模型   第三部分:MVCD模型   在上一节中,从一般的原则上介绍了两种Web应用模型,但是如何理解和把握这样的模型,将不同的Web技术正确应用到Web程序不同的功能模块中是一个非常实际的话题。下面就在实际编程中如何去掌握Web编程模型做一些分析。  1、两层客户/服务器模型图11、两层客户/服务器模型  Web应用程序天生是一种客户/服务器应用程序,在ASP(Application Service Provider)逐渐成为Internet应用发展的一个重要方向的时候,使用哪一种编程模型来实现Web应用程序还处于探索之中。上面介绍的微软的DNA结构和Java编程结构就是人们在ASP(Application Service Provider)编程模型上进行探索的结果,但是由于这些技术出现比较新、掌握起来也有一些难度,所以许多编程人员采用了使用ASP或是JSP中嵌入“SQL”来实现数据存取和一些相关逻辑,如图11所示。  这样的编程模型有对一些小型系统比较合适,因为不需要太复杂的技术,技术人员比较好找,实现起来也比较快。但是,这种编程模型缺点还是比较明显的:维护困难、重用困难、大型系统中难以管理。  要解决该模型问题的关键是,将逻辑层抽象出来。但是,在以数据中心编程中,数据库不但提供基本的数据存取功能,而且与SQL丰富的表达能力一起提供强大的逻辑表达能力;再上节介绍的图9、图10所示两种模型掌握起来有一些难度,所以出现了该模型的一个改良版本,如图12所示。 图12、改良的客户/服务器模型  组成在该改良的模型中,为数据库中的主要的表都建立了一个类,JSP/ASP通过该类实现对数据库表的操作。这个模型一个方面实现了SQL语句封装,方便了程序的维护;另一个方面也提高了系统的重用性,即对Table类的重用。  但是,由于大多数数据库操作都是针对多数据表的操作,如果采用单表的方式来完成逻辑,未免有些浪费数据库与SQL的逻辑功能。另外,由于系统没有实现逻辑层的抽象,不能解决上面提高关键问题。  2、MVC模型的介绍  在传统的面向对象编程中,我们曾经接触过MVC模型,如图12所示。图13、MVC模型  在该模型中,应用程序分为三个组成部分:  View: 这是用户界面部分,与Web应用程序一样,主管应用程序与人之间的接口:一个方面它为用户提供了输入手段,并触发应用逻辑运行;另一个方面,它又将逻辑运行的结果以某种形式显示给用户。   Controller: 该部分是用户界面与Model的接口;一个方面它解释来自于view的输入,将其解释成立系统能够理解的对象,同时它也识别用户动作,并将其解释对Model特定方法的调用;另一个方面,它也处理来自于Model的事件和Model逻辑执行的结果,调用适当View为用户提供反馈。   Model: 这是整个模型的核心,它表示的是解决方案空间的真正的逻辑。它采用面向对象的方法,将问题领域中的对象抽象为应用程序对象。在这些抽象的对象中封装了对象的属性和这些对象所隐含的逻辑。   上面所示的编程模型中,在应用程序执行过程中,数据就保存在Model的实例中,也就是保存在内存中。当用户需要保存执行的结果时,将模型中的数据保存为特定格式的文件。在用Java实现模型时,可以直接使用Java对象的Serializable特性来保存对象。这种模型适合一些工具软件的开发,如Case工具或是CAD工具。这些工具软件所具有一个共同特征是模型本身比较复杂、数据量不大而且是单用户单模型实例操作。  Web应用程序有着与工具类应用程序不同的特点:数据量大、多用户并行操着。如果象上面一样采用面向对象模型,则往往是多模型实例同时存在,上面的模型不再适合于这样的Web应用程序。  虽然MVC模型不适用于Web应用,但是它为Web应用程序的开发提供了一些借鉴意义。再该模型中提供了对模型的抽象,也就是逻辑的抽象。如果改良该模型,在内存中不保留对象的属性值,并且增加一个数据层,将模型与数据库连接起来,可能是一个好办法,如图14所示。图14、调整后的MVC模型(MVCD:Model_View_Control_Data)  如何用Java实现图14所示的MVCD模型  3、WCS、MPE模型介绍  图15所示的是在WCS和MPE中所采用的编程模型。该编程模型将JSP、Servlet、JavaBean和JDBC技术有机的结合在一起,基本上实现了图14所示的MVCD模型。图15、JICPD(JSP_IC_COMMAND_PO_DATA)模型  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封装在模型中,如图16所示。图16、JIMPD模型 下载本文示例代码


Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分Web 应用程序模型及其Java实现之第三部分
阅读(168) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~