虽然这是一个功能很简单的基于Web的应用程序,但是经过认真地探索,最终设计出了具有健壮性,灵活性,可重用性的基于层模式的Web应用的架构。
Ø 基于层模式的Web应用的架构中不同层的作用:
1. 表示层:表示层就是客户端,为用户转换工作流层返回的结果。它包括客户端的软件组件、应用程序、Web浏览器等。这些不同形式的客户端能够以可视形式提供丰富、灵活的用户交互界面,用来表示信息和收集数据,并利用业务逻辑层提供的功能服务完成用户请求,并且还可能会执行一些简单的业务逻辑,比如对用户输入的数据进行简单的检查。整个业务处理的结果最后回传给表示层。
2. 控制层:这是体系结构下的一个业务流程控制层,也称为业务接口,它提供了一个到表示层的简单界面(也称为接口)。工作流层管理内部状态,并使用业务逻辑层提供的自动操作来完成复杂的工作流。
3. 业务逻辑层:业务逻辑层通过隐藏来自更高层的事务逻辑和实施细节来提取业务事务,用于实现业务逻辑以及事务规则处理。这一层是分布式应用系统的关键所在。它负责处理所有来自外观表示层的用户请求,当它通过数据服务层提供的接口处理完请求之后,还要把处理结果返回给外观表示层。这层通常也被称为中间层。业务逻辑层提供执行业务的规则,为具体应用提供事务处理、安全控制以及为满足不同数量客户端的请求而进行性能调整等功能。
4. 数据访问层:数据层的上一层为数据访问层,也称数据持久层。它从数据库中数据的表示形式中提取数据,完成数据的定义、维护、访问与更新,并且包含所有数据库操作公用的例程。数据访问层直接由业务逻辑层使用,管理并响应业务逻辑层的数据请求。
5. 数据层:它距离客户端最远,其中存储了应用所需的信息。
最终的类结构如下图所示:
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 380.25pt; HEIGHT: 414pt" type="#_x0000_t75"><imagedata o:title="总图" src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg"></imagedata></shape>
从上图各个jsp页面可以看出来,student.jsp(学生注册页面)充当Model 1里的表示层(View)跟控制层(Controller)的角色,也就是说在student.jsp这个代码里显示用户注册的JSP代码,也有业务流程代码,用来选择下一个要显示的页面,如果说注册成功则是thanks.jsp(addStudent_success.jsp),如果是注册失败则是error.jsp(daoerror.jsp)。而在Controller(student.jsp)里调用了Model层的StudentService类:
上图的IStudentDAO是一个接口,它用DAO工厂类DaoFactory通过一个配置文件CourseConfig.xml来动态获得,具体的过程就在下面的”运用DAO模式来设计数据持层”部分来解释了。
这样整个Model 1的架构就很清晰了,我们可以发现这个过程里一个Servlet也没有用到,这就验证了那句话:“Model 1是以JSP为中心(JSP Centric)的设计模型”。
ü 按照实验说明,对于选课模块,使用Model 2来实现:
这种以Servlet为中心的实现方式,详细的实现方式解释如下:
对于上图,对应MVC模式的Model 2实现方式:
显示层(View):register.jsp(作为控制层的输入),register_success.jsp(作为控制层的输出,如果学生选修该门课程成功就转到这个页面),daoerror.jsp(作为控制层的输出,如果学生选修课程时发生错误,如已经选修了,就转到这个错误页面。),
控制层(Controller):RegisterServlet.java(它负责接收客户端请求(控制层的输入,register.jsp)并处理此请求:doPost,将它传递给合适的JSP(success or error))。
模型(Model):RegistService.java Student.java Register.java LessonService.java Lesson.java,MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。在这个实验里,也是按“以便于模型的重构和提高重用性”的规则来设计Model的。另外,模型是所有的商业逻辑代码片段所在,从上图也可以看出模型提供了两种对象:业务实体对象(Student,Register,Lesson)和业务处理对象(RegistSerivce,LessonService)。业务处理对象封装了具体的处理逻辑,业务实体对象可以通过定义属性描述客户端表单数据。业务处理对象RegistSerivce等并没有直接对可持久的数据进行操作,而是通过那些DAO接口来操作,这也是为了“以便于模型的重构和提高重用性”。
对应下图,我们可以发现这种实现方式跟Model 1相比的不同之处。
分享到:
相关推荐
在每篇文章中,作者都向我们展示了一个著名的软件架构,并分析了什么让其具有创新性,让其极其符合设计目标。本迷你书是《架构之美》的精选版,节选了其中的4个章节。 目录 第1章 架构概述 1.1 简介 1.2 创建软件...
本文介绍了I2C串行EEPROM应用系统的健壮性设计
>本系列文章从基础规范、代码设计、框架设计和崩溃分析等角度去讨论如何建立一个健壮的安卓应用. 本系列文章分以下几个类目来讨论: 基础规范 >基础规范部分主要讨论命名规范和代码规范, 规范这种东西虽然消灭了每个...
I2C串行EEPROM应用系统的健壮性设计.pdf
嵌入式Linux应用程序健壮性研究,孙新贺,王晓辉,嵌入式Linux操作系统以其出色的稳定性、可靠性在嵌入式系统领域得到日益广泛的应用,嵌入式Linux操作系统现场应用复杂,控制对象多��
在每篇文章中,作者都向我们展示了一个著名的软件架构,并分析了什么让其具有创新性,让其极其符合设计目标。. 本书内容包括: ·facebook的架构如何建立在以数据为中心的应用生态系统之上 ·xen的创新架构对操作...
本书详细讲解了3个应用程序的构建过程:一个日程安排系统、一个博客引擎以及一个电子商务商店。细致分析如何创建健壮的Web数据库应用程序,以及如何避免困扰许多PHP和MySQL开发者的常见错语。 本书是为程序员提供的...
email - 一个健壮且灵活的电子邮件Go库
本章首先从架构定义、发展历程、典型架构和未来发展等方面概要说明,给读者建立一个架构的整体概念;然后对系统架构设计师的定义、职责、范围和工作内容等进行讲解,并说明了对于一名合格的系统架构设计师的要求。 ...
Java Web服务器(应用服务器) WebLogic、 WebLogic是美国bea公司出品的一个application server确切的说是一个基于j2ee架构的中间件。BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库...
考试合格人员能够根据系统需求规格说明书,结合应用领域和技术发展的实际情况,考虑有关约束条件,设计正确、合理的软件架构,确保系统架构具有良好的特性;能够对项目的系统架构进行描述、分析、设计与评估;能够...
软件系统的健壮性、灵活性、可重用性、可升级性和可维护性,在很大程度上取决于应用服务层的设计。因此,如何构建一个良好架构的应用服务层,是应用软件开发者需要着重解决的问题。 为了使应用服务层的设计达到最好...
Huffman树的编码和译码操作系统,包含两个头文件和对应的源文件,一个测试用的main源文件;欢迎大家学习和交流 1.我将访问的文件名以宏定义的方式放在源文件内,可以自行修改 默认: 读取huffman_test_file.txt---> ...
本毕业设计不仅是一个功能完善的人力资源管理系统,更是一个可供学习和参考的优秀案例。通过阅读毕业论文和源代码,读者可以深入了解Spring Boot框架的应用技巧、Web开发的最佳实践以及人力资源管理系统的设计理念。...
基于该模型将资源分配描述为一个非合作博弈过程,求得了帕累托最优分配方案,并提出了一种健壮性增强的离线资源分配策略.实验结果表明:该分配模型兼顾了效率和公平, 增强了作业执行的健壮性,并较好地评估资源的信任...
Salmon 是一个纯 Python 邮件服务器,旨在以现代 web 框架的风格创建健壮且复杂的邮件应用
在每篇文章中,作者都向我们展示了一个著名的软件架构,并分析了什么让其具有创新性,让其极其符合设计目标。. 本书内容包括: ·facebook的架构如何建立在以数据为中心的应用生态系统之上 ·xen的创新架构对...
全新的框架结构,增强程序健壮性 抗断线机制,实现无人值守 短信报警(需开通 139 邮箱)或者邮件报警 转换工具包中包含的子体有: pw87 - 25X PHPWind8.7 -> Discuz! X2.5 pw85 - 25X PHPWind8.5 -> Discuz! X2.5 ...
全新的框架结构,增强程序健壮性 抗断线机制,实现无人值守 短信报警(需开通 139 邮箱)或者邮件报警 转换工具包中包含的子体有: pw87 - 25X PHPWind8.7 -> Discuz! X2.5 pw85 - 25X PHPWind8.5 -> ...