`
jays1235
  • 浏览: 8466 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

(转载)B/S开发模式的衍生

Web 
阅读更多
本文对Java B/S开发模式做一个总结,对JSP+JDBC、JSP+JavaBean以及基于MVC Framework等Java B/S开发模式的发展做一些回顾和思考,从而更好的理解和使用SimpleFramework.

B/S作为如今最为流行的体系结构模式,也是受到了广大开发人员以及客户的认同,其开发模式也在不断的发展着,在这里主要就Java B/S的开发模式做一番回顾和探讨,也算是自己对于Java B/S开发模式的一种总结。

JSP+JDBC

在Java B/S开发模式中最简单的一种开发模式是页面+逻辑处理,映射到技术上反应出来的有Jsp+Jdbc,在基于这类的实现中在View层也就是jsp页面上负责数据的显示、逻辑处理,结合jdbc完成数据的持久化,在小型的项目中,人们确实发现这种方式是最为方便的,但在复杂的项目以及需求不断变化的项目中,人们慢慢的发现这种方式造成了不少的问题, 首先是调试的问题,想想在一个jsp页面中进行排错是多么的困难,其次是修改的问题,为了满足用户需求的一个小小的变化,都需要去改不少的页面,而且很多 时候由于写的时间长了,自己都需要回忆很久才能想起是怎么回事,更不用说如果人员流动了会怎么样,同时还带来开发效率的问题,由于需要缺少足够的调试的支 持,需要较为熟练的开发人员才能快速的完成,对于一般的人员来说需要一定的适应和学习过程,当然伴随而来的还有诸如修改界面的时候一不小心少copy了点代码什么造成的错,最大的问题可能还是重用的问题,通常会造成N多同样的代码在页面上copy来copy去的,总结下来在这种模式下有几个比较重大的问题就是:

1、调试问题。

2、维护问题,显示和逻辑处理在一起导致了修改显示的时候较为困难,至于修改代码则因为之前的调试问题导致了困难,同时由于逻辑均在页面上后期接手人员需要一段时间去理解。

3、代码重用性问题。

但同样它还是存在优点的,那就是可以很快的上手,但由于调试和维护性问题确实太大了,所以在现在也是基本不再采用这种方式了。

JSP+JavaBean

在经历了jsp+jdbc阶段后,开始考虑怎么样去解决上面三个问题,这个时候就诞生了诸JSP+JavaBean这样的技术体系,在这个体系中由 jsp页面负责显示以及接收页面请求,并调用相应的JavaBean来完成逻辑处理,在获取其返回的处理数据后转到相应的页面进行显示。在这样的技术体系 中,由于逻辑是由JavaBean来完成的,可以对其进行调试了,代码的重用性一定程度上也得到了提高。刚开始的时候用这样的技术体系确实发现比以前用 jsp+jdbc爽了很多,但随着用多了,慢慢又发现了问题,那就是在页面中需要编写对于页面请求数据的获取,还得根据请求去调用相应的 javabean,并根据javabean的处理结果转入相应的页面,这同样造成了修改的麻烦,毕竟是去页面上修改这些逻辑,总结下来在这种Java B/S开发模式下有比较重大的问题就是:

1、代码重用性以及维护性问题。但这里的代码重用性问题和jsp+jdbc的就不同,在逻辑处理部分现在已经可以重用了,但现在在各个页面就不得不 重复的写获取页面请求的参数、相应的调用Model、根据Model的处理结果转发页面,这样的话就导致了在改的时候需要到处去找,造成了维护的复杂。

2、系统结构不清晰。毕竟仍然是在页面控制整个响应页面事件的处理流程,这个时候就造成了很多页面中出现完全相同的jsp代码,而且控制代码在页 面,仍然是不便操作,例如对于JavaBean的调用等,而且由于获取javabean的数据需要转发的缘故,其实通常就是在最终的显示页面上加上上面的 控制事件处理流程的代码,并没有真正的做到显示和处理的分离。

同样,它的优点在于分离了显示和业务逻辑处理,增强了可调试以及维护性,而且也是很容易上手的,对于小型项目来说仍然是可选的方案之一。

基于MVC Framework

在经历了上面的Jsp+JavaBean的Java B/S开发模式后,我们发现其实现在最需要的就是在jsp、javabean之间能有个东西自动完成页面请求数据的封装、根据请求调用相应的 javabean、同时根据javabean的处理结果返回至相应的View,有了这样的思想后,发现smalltalk中的MVC思想很适合这种场景, 于是便在Java B/S开发中引入了MVC思想,在这里也简单的介绍下MVC思想,MVC强调View和Model的分离,View所面对的是Controller,由 Controller负责与Model进行交互,View只负责显示页面以及显示逻辑的处理,显示逻辑指的是诸如第一行要显示蓝色、第二行要显示红色这样 的显示方面的处理,Controller负责接受页面请求,并将其请求数据进行封装,同时根据请求调用相应的Model进行逻辑处理,在Model处理后 返回结果数据到Controller,Controller将根据此数据调用相应的View,并将此数据传递给View,由View负责将数据进行融合并 最终展现。MVC带来的优点很明显的体现出来了,基于一个这样的MVC Framework的话开发人员可以按照一种固定的模式进行开发,规范了整个开发过程,提高了质量以及系统结构的清晰性,并由于保证了 View/Model的分离,使得一个Model可以对于多种显示形式的View,需要的仅仅是去改变View和Controller。

按照MVC思想,最容易想到的实现方案莫过于jsp+servlet+javabean,在这里面jsp对应着View,servlet对应着 Controller,javabean对应着Model,因为采用servlet可使用servlet container已经封装好的页面数据请求对象HttpServletRequest,这样就省去了自己封装页面请求数据的工作,作为 Controller同时还需要承担根据请求调用对应的javabean,最简单的做法无非就是在Servlet中直接根据某种逻辑(诸如反射或接口)调 用相应的bean进行执行,之后将HttpServletRequest、HttpServletResponse作为参数传入javabean进行处 理,javabean从HttpServletRequest中获取请求数据,将返回的结果数据放入HttpServletResponse,整个过程结 束后继续由Controller接手进行处理,这个时候作为Controller的servlet将根据处理的结果返回相应的页面,在这个模型使用时人们 慢慢的发现了一个问题,那就是随着jsp、javabean的变化造成了controller的不断修改,需要修改其中调用相应javabean以及转发 相应页面的部分,为了解决这个问题,首先想到的是应该分离根据请求调用相应javabean的步骤,这个时候采用了设计模式中的front controller+application controller的方法,front controller负责接受页面请求并进行封装,同时将此数据对象传递至application controller,由application controller来负责调用相应的bean,这样的设计其实都是遵循着一个设计原则,就是职责单一,通常实现application controller的模式是Command模式,在这种情况下MVC Framework的结构体系就演变成了view+controller(front+application)+model。

在完成了上述演变后慢慢又发现了一个问题,就是model依赖于了httpservletrequest,这样造成的一个问题就是没法测试,仍然要 不断重启服务器来测试,当然与此同时的发展是model层的细化,细化成用于响应页面请求的action Layer+Domain Model Layer+Persistent Layer,在这里不去讨论后面层次的问题,因为作为MVC Framework它并不管你Model层是怎么个处理流程的。

慢慢也发现了另外一个问题,那就是变化经常要影响到controller的修改,于是便引入了采用配置文件的解决方法,编写action的配置文 件,在配置文件中控制根据action的返回结果转入相应的View,这样的话在将来需要改变的时候只需要去改变这个配置文件就可以了,保证了 Controller的稳定,这是典型的设计中的重点考虑因素,分离变化和不变化的,让变化造成的影响最小。

但在引入了上面的配置文件后,慢慢又发现了问题,那就是手写配置文件总是容易出各种各样的问题,这个时候采用图形化的界面来生成配置文件的想法又有了,这也就造就了page flow的诞生,当然,这只是page flow的一小部分功能。

当然,随着MVC的发展,也带动了其他相关技术的发展,如异步请求/响应模式(ajax、amowa)等。

在MVC思想接受后开源界的MVC Framework也是如雨后春笋般的冒出,比较知名的有struts、webwork、spring mvc等,这些MVC Framework基本都已经做到了上面提及的MVC思想演变的一些需求,当然,即使现在的MVC Framework是做到了,但在Java B/S开发模式使用这些MVC Framework的时候我们通常又开始违背MVC思想的基本要素,就是保持View仅仅是View的原则,所以我比较推荐在View使用 Velocity这之类的东西作为View,尽量保持View的纯洁性,任何技术的发展都是循序渐进的,不站在那个高度的时候是不知道前面还有什么样的高山的.那么现在我们缺少的又是什么呢?现在的MVC Framework中还存在着什么不足呢?这个问题是值得大家共同思考的。
分享到:
评论

相关推荐

    金融衍生品交易平台开发任务书

    系统结构设计为C/S(客户端/服务器)模式,意味着需要开发客户端界面和服务器端逻辑。客户端部分负责展示交易界面和用户交互,服务器端则处理交易请求、数据存储和计算。系统应包含三个主要功能:金融衍生产品学习...

    DigGold(https://pan.baidu.com/s/1boT8GhT)

    CTA策略通常涉及利用技术分析或统计模型来生成交易信号,对期货、期权等金融衍生品进行买卖操作。在这个案例中,该策略的回测年化收益率达到了80%以上,这显示了策略在历史数据上的优秀表现,但需要注意的是,实际...

    境外OTC衍生品市场的双边清算模式.pdf

    《境外OTC衍生品市场的双边清算模式》这篇文章深入探讨了场外(OTC)衍生品市场清算模式的演变,特别是双边清算模式的重要性及其历史影响。OTC衍生品市场的特点是灵活性和定制化,早期主要采用非标准化双边清算模式...

    游戏衍生品授权开发合作协议-律师起草.pdf

    游戏衍生品授权开发合作协议-律师起草.pdf

    基于LBP和B / S框架的叶片图像识别系统的实现

    从上述内容可知,本研究基于LBP和B/S框架,首先优化了算法,提高了识别的效率和准确性,然后通过实施LBP的衍生算法,实现了对植物纹理的广泛实验。最终,研究者成功构建了一个在线系统,可以识别用户上传的植物图像...

    浅谈动漫衍生品的探究与发展——以《神奇宝贝》为例.pdf

    动漫衍生品的运作模式:动漫衍生品的开发与运作模式通常是以IP(知识产权)为核心,涵盖从原创内容的出版、动画改编上映、IP形象衍生品的生产销售,到动漫IP的深入开发等多个环节。以《神奇宝贝》为例,其版权属于...

    论中国电子游戏衍生品的开发.docx

    《论中国电子游戏衍生品的开发》 中国电子游戏衍生品的开发是当前文化产业中一个亟待关注的领域。在全球化的背景下,ACG产业——包括动画、漫画和游戏——已经成为了第三产业的重要驱动力,展现出强劲的增长态势。...

    一韩国偶像团体为对象的明星衍生品开发借鉴参考.pdf

    标题和描述中提到的是关于以韩国偶像团体Super Junior(SJ)为例的明星衍生品营销方案,这份内容可能是一份教育机构的课程作业,旨在探讨如何借鉴韩国偶像团队的成功经验来开发和推广明星衍生产品。以下将对这个话题...

    传统科普读物数字化衍生产品开发的探索与思考以植物类科普读物为例.pptx

    植物类科普读物数字化衍生产品开发模式的思考包括以下几个方面: 1.内容创作:植物类科普读物数字化衍生产品的内容创作需要具备科学性和趣味性,要能够吸引读者的注意力。 2.发行:数字化衍生产品的发行需要依托...

    基于SpringFramework衍生的配套开发支持.zip

    基于SpringFramework衍生的配套开发支持.zip基于SpringFramework衍生的配套开发支持.zip基于SpringFramework衍生的配套开发支持.zip基于SpringFramework衍生的配套开发支持.zip

    基于PHP的小型内容管理系统的研究与开发毕业设计

    随着网络应用的丰富和发展,很多网站往往不能迅速跟进大量信息衍生及业 务模式变革的脚步,而内容管理系统恰恰能够通过对企业各种类型的...理系统有关的开发环境, 并结合 B/S 结构、框架概念,开发研究了内容管理系统。

    2021-2025年中国文娱IP衍生行业市场开发与拓展战略研究报告.pdf

    中国文娱IP衍生行业市场开发与拓展战略研究报告深入分析了2021年至2025年文娱IP行业在中国的发展前景,内容涵盖了市场开发战略的基本类型与选择、市场深度调研分析、以及国内外市场发展的比较借鉴等核心部分。...

    基于数据挖掘技术的图书馆信息管理系统开发.pdf

    ***技术是在B/S模式基础上的一种衍生技术,它主要由服务器端和前端两部分组成。服务器端负责网络应用程序的输出,而前端负责向服务器发出指令并获取界面操作的反馈。***技术具有性能高、灵活度强、支持的开发工具...

    水分散性石墨烯/两亲pyr衍生物纳米复合材料:CEA电化学免疫传感的高AuNPs负载能力

    水分散性石墨烯/两亲pyr衍生物纳米复合材料:CEA电化学免疫传感的高AuNPs负载能力

    Vanilla Option - Greeks - Black Scholes - Close Form:通过 B/S 计算香草期权希腊人-matlab开发

    在本项目中,我们将探讨如何使用MATLAB来计算这些希腊字母,主要关注Black-Scholes(B/S)模型的闭合形式解决方案。 首先,Delta(Δ)是期权价格对标的资产价格的敏感度。如果期权是看涨的,Delta值将介于0到1之间...

    软件开发职业规划

    由此而衍生的基于组件开发 CBD/面向方面编程AOP 等等。面向对象思想是软件开发的核心思想,是软件开发人员必须具备的知识。 此外,软件开发人员还需要具备一种关系型数据库,ORACLE/SqlServer/DB2/MySQL 等等。...

    文化衍生品开发合同范本.docx

    ### 文化衍生品开发合同关键知识点解析 #### 一、合作背景及目的 - **合作双方**:本合同涉及的两方分别为“甲方”和“乙方”。其中,“甲方”是一家依照中国法律成立并合法运营的企业,隶属于某个更大的实体;而...

Global site tag (gtag.js) - Google Analytics