也易于维护。 其次,由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。
再次,由于一个应用被分离为三层,因此有时改变其中的一层就能满足应用的改变。一个应用的业务流程或者业务规则的改变只需改动MVC的模型层。 控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起完成不同的请求,因此,控制层可以说是包含了用户请求权限的概念。
最后,它还有利于软件工程化管理。由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。 2.2.2 MVC 设计模式的好处
将模型-视图-控制器部分应用于 Java Web 应用程序开发有几个好处:
?
可以在一定程度上分布开发成果,实现了在 Web 应用程序中的一部分的更改不需要对其它部分进行更改。负责编写业务逻辑的开发者可以独立于负责控制流的开发者工作,而 Web 页面设计者可以独立于这些开发者工作。
?
可以更容易建立工作原型。可以执行如下操作,例如:
1. 创建一个原型 Web 应用程序,它访问几个基于工作站的程序。 2. 更改应用程序以响应用户反馈。
3. 在同一平台或其它平台上实现生产级程序。
除了对程序本身所进行的工作外,只需对配置文件或名称服务器内容进行调整,而不需要对其它源代码进行调整。
?
可以更容易地迁移旧程序,因为视图与模型和控件是分开的,并且可以根据平台和用户类别进行裁剪。
? ?
可以维护由不同位置上的不同技术组成的环境。
MVC 设计具有组织结构,该结构更好地支持可伸缩性(构建更大的应用程序)并且易于修改和维护(原因是任务区分得更清楚)。
3.系统总体设计和系统功能概述
3.1.1 系统设计目标
本系统设计的目标是提高软件的质量与生产率,最终实现软件的工业化生产。质量是软件需求方最关心的问题,用户即使不图物美价廉,也要求个货真价实。生产率是软件供应方最关心的问题,老板和员工都想用更少的时间挣更多的钱。质量与生产率之间有着内在的联系,高生产率必须以质量合格为前提。如果质量不合格,对供需双方都是坏事情。从短期效益看,追求高质量会延长软件开发时间并且增大费用,似乎降低了生产率。从长期效益看,高质量将保证软件开发的全过程更加规范流畅,大大降低了软件的维护代价,实质上是提高了生产率,同时可获得很好的信誉。质量与生产率之间不存在根本的对立,好的软件工程方法可以同时提高质量与生产率。 3.1.2 JavaBean的任务
JavaBean的任务就是: “Write once, run anywhere, reuse everywhere”,即“一次性编写,任何地方执行,任何地方重用”。这个任何实际上就是要解决困扰软件工业的日益增加的复杂性,提供一个简单的、紧凑的和优秀的问题解决方案。
1. 一个开发良好的软件组件应该是一次性地编写,而不需要再重新编写代码以增强或完善功能。因此,JavaBean应该提供一个实际的方法来增强现有代码的利用率,而不再需要在原有代码上重新进行编程。除了在节约开发资源方面的意义外,一次性地编写JavaBean组件也可以在版本控制方面起到非常好的作用。开发者可以不断地对组件进行改进,而不必从头开始编写代码。这样就可以在原有基础上不断提高组件功能,而不会犯相同的错误。
2. JavaBean组件在任意地方运行是指组件可以在任何环境和平台上使用,这可以满足各种交互式平台的需求。由于JavaBean是基于Java的,所
以它可以很容易地得到交互式平台的支持。JavaBean组件在任意地方执行不仅是指组件可以在不同的操作平台上运行,还包括在分布式网络环境中运行。 3.JavaBean组件在任意地方的重用说的是它能够在包括应用程序、其他组件、文档、Web站点和应用程序构造器工具的多种方案中再利用。这也许是JavaBean组件的最为重要的任务了,因为它正是JavaBean组件区别于Java程序的特点之一。Java程序的任务就是JavaBean组件所具有的前两个任务,而这第3个任务却是JavaBean组件独有的。 3.1.3 JavaBean的设计目标及其如何被实现
现在我们来看一实现JavaBean的一些具体的主要设计目标: 1.紧凑而方便的创建和使用
JavaBean紧凑性的需求是基于JavaBean组件常常用于分布式计算环境中,这使得JavaBean组件常常需要在有限的带宽连接环境下进行传输。显然,为了适应传送的效率和速度,JavaBean组件必须是越紧凑越好。另外,为了更好地创建和使用组件,就应该使其越简单越好。通常为了提高组件的简易性和紧凑性,设计过程需要投入相对较大的功夫。
现在已有的组件软件技术通常是使用复杂的API,这常常搞得开发者在创建组件时晕头转向。因此,JavaBean组件必须不仅容易使用,而且必须便于开发。这对于组件开发者而言是至关重要的,因为这可以使得开发者不必花大量功夫在使用API进行程序设计上,从而更好地对组件进行润饰,提高组件的可观赏性。
JavaBean组件大部分是基于已有的传统Java编程的类结构上的,这对于那些已经可以熟练地使用Java语言的开发者非常有利。而且这可以使得JavaBean组件更加紧凑,因为Java语言在编程上吸收了以前的编程语言中的大量优点,已经使开发出来的程序变得相当有效率。 2.完全的可移植性
JavaBean API与操作基础的独立于平台的Java系统相结合,提供了独立于平台的组件解决方案。因此,组件开发者就可以不必再为带有Java applet平台特有的类库而担心了。最终的结果都将是计算机界共享可重复使用的组件,并在任何支持Java的系统中无需修改地执行。 3.继承Java的强大功能
现有的Java结构已经提供了多种易于应用于组件的功能。其中一个比较重要的是Java本身的内置类发现功能,它可以使得对象在运行时彼此动态地交互作用,这样对象就可以从开发系统或其开发历史中独立出来。 对于JavaBean而言,由于它是基于Java语言的,所以它就自然地继承了这个对于组件技术而言非常重要的功能,而不再需要任何额外开销来支持它。
JavaBean继承在现有Java功能中还有一个重要的方面,就是持久性,它保存对象并获得对象的内部状态。通过Java提供的序列化(serialization)机制,持久性可以由JavaBean自动进行处理。当然,在需要的时候,开发者也可以自己建立定制的持久性方案。 4.应用程序构造器支持
JavaBean的另一个设计目标是设计环境的问题和开发者如何使用JavaBean创建应用程序。JavaBean体系结构支持指定设计环境属性和编辑机制以便于JavaBean组件的可视化编辑。这样开发者可以使用可视化应用程序构造器无缝地组装和修改JavaBean组件。就像Windows平台上的可视化开发工具VBX或OCX控件处理组件一样。通过这种方法,组件开发者可以指定在开发环境中使用和操作组件的方法。 5.分布式计算支持
支持分布式计算虽然不是JavaBean体系结构中的核心元素,但也是JavaBean中的一个主要问题。
JavaBean使得开发者可以在任何时候使用分布式计算机制,但不使用分布式计算的核心支持来给自己增加额外负担。这正是出于JavaBean组件的紧凑性考虑的,无疑分布式计算需要大量的额外开销。
3.2系统功能概述
3.2.1 用户登陆系统和用户注册系统
\登录\是我们验证用户身份的过程,用户只需要在登陆界面填写自己的用户名和密码就能完成登陆这一动作,系统将进行前台判断——用户名或密码栏填写是否为空判断,一旦通过前台判断系统就将转入后台处理,根据用户提供的用户名和密码查询数据库中相关信息来判断登陆是否成功,如果成功页面就跳转到购物系统的主页面同时分配一辆专门属于用户的购物车进行操作了,如果登陆失败那么还是停留在登陆界面并且给出相应的信息。
当然顾客能进行成功的登陆也必须是老用户——之前已经注册过了。注册只需要用户提供用户想要的用户名和密码,只要用户名没有被占用过那么就注册成功同时页面也将跳转到购物页面同时系统分配购物车,如果不幸用户所喜欢的用户名已经抢先被他人注册了,那么就注册失败还是停留在注册页面同时给出相关信息。
注意:如果用户在没有登陆的状态下进进入系统主页面那么用户只是以游客的身份只能查看商品相关信息并不能进行实质性的购买等操作。 3.2.2 智能化的辨认功能
如果用户是以游客的身份进入系统而没有进行登陆的话,那么在系统的页面上会出现你是游客,请登陆后购买图书的信息。如果用户通过登陆系统或注册系统进入,那么系统就会“辨认”出你是谁,同时在页面上友好的显示欢迎某某(用户的用户名)信息。同时系统会根据用户的不同身份来允许用户进行在他权限内的操作。
3.2.3 图书查询功能
在主页面中把本系统中所有的图书依次罗列开来,这样对于没有明确购买目的的顾客有一定的好处,当然很多情况下顾客只是对于众多类型的图书中的某一