开发完整J2EE解决方案的八个步骤

来源:百度文库 编辑:神马文学网 时间:2024/04/24 09:57:24
摘要
Java 2企业版本(The Java 2 Enterprise Edition,J2EE)平台由4个重要的部分组成:规范,参考实现,兼容性测试包和BluePrints程序。BluePrints描写了一个散布式组件系统的最佳练习和设计领导方针。这篇文章先容了一个由八个步骤组成的J2EE开发方法论,该方法是基于Rational Unified Process和BluePrints利用例子的。通过这篇文章,你将可以更好地懂得J2EE系统的很多重要主题,并且可以利用这些知识来扩大和修正这个简略的方法论,从而解决各种特定的贸易标题。
在贸易领域,我们应用Java 2企业版本(J2EE)来解决贸易标题,开发贸易的软件,或者为其它的贸易项目供给接洽的服务。假如一个公司要应用多层的系统来建立一个电子商务的网站,在其全部开发周期中,通常都需要经理、系统构建职员、设计职员、编程职员、测试职员和数据库专家参与进来。
为了让不同的部分可以有效地工作,我们通常都需要一个软件开发流程。一个经典的开发流程包含有瀑布模型、快速利用开发(RAD)和终极编程。在这篇文章中,我们将集中先容一个风行的软件设计流程--Rational Unified Process(RUP)。RUP供给了一个专门的方法来为不同的角色分配任务。它的目标是在一个可预计进度和预算内,确保我们生产出高质量的软件以符实用户的需要。
我应用RUP作J2EE开发有三个方面的原因。首先,RUP是以系统为中心的;在提交资源作全方位的开发之前,它首先开发出一个可履行的系统原型。第二,RUP是迭代的而且是基于组件的。该系统的基础通常是包含有一个架构,它可以方便地通过迭代地增长组件,从而在不影响系统其它部分的基础上,自定义和扩大一个系统的功效。第三。RUP应用一个产业标准的语言--UML,可以将系统的系统和组件以可视化的模型展现。RUP有4个不同的开发阶段:初始(inception), 细化(elaboration), 构建(construction)和转换(transition)。这篇文章将从一个技巧的观点来先容J2EE开发的8个基础步骤,它是保持以系统为中心的。
1、需求分析
需求分析用来描写系统应当和不应当做什么,从而开发者和用户可以创立一个初始化的贸易接洽。你可以用贸易的概念、该领域的术语、框图或者其它方法将功效性的需求写成文档,而非功效性的需求,例如性能和事务,可以写在附加的需求文档中。你可以用文本或者HTML来创立高级别的UI模型,采用哪种方法,要看你在该项目中参与的深度。
一个范例的电子商务系统。viewOrder图阐明的是一个用户通过web登录至系统,查看订单的列表,并且可点击进往查看每张订单的细节。addLineItems阐明的是用户浏览产品目录,选择感爱好的产品,并且将它们加进到购置订单中。
II、面向对象的分析
分析产生标题域模型:类、对象和交互。你的分析应当脱离任何的技巧或者实现的细节,而应当包含有一个理想的模型。对象分析可赞助你懂得标题和获得标题领域方面的知识。你必须掩护一个纯领域的模型,它不包含技巧的细节,这是由于贸易流程的转变要比信息技巧慢得多。
上面的两步--需求分析和面向对象的分析并不是J2EE特有的,对于很多面向对象的方法论来说,都是很常见的。一个高级别的对象分析模型,它是一个宠物店的例子利用。它阐明了我们由需求分析use cases中断定的重要概念。我们将这些概念模型化到对象中,并且断定它们的关系。
需求和对象分析的成果是J2EE系统开发的一个进门点。要开发一个系统,你可选择一个垂直的部分--通常是一个要害的部分,例如是订单领域的对象模型--来作对象设计、实现、测试和开发。(一个垂直的部分,是一个RUP概念,是系统的一小部分。开端点是use case的一个子集。一个垂直部分的实现就会产生一个全功效的迷你系统,包含所有层,例如用户界面层的JavaServer Pages(JSPs),中层的贸易对象,例如是Enterprise JavaBeans (EJBs)和后台的数据库)。你可以将由原型中得到的经验利用到域对象中,并且将这些熟悉作为对象设计阶段的一个设计领导方针。
III、系统规范
经过前面的两个步骤,贸易领域的标题和需求都应当明确了。现在我们将集中讨论技巧策略和系统上。一个系统就是各部分一起定义全部系统的蓝图:结构,接口和通信技巧。我们可进一步将一个系统划分为企业和利用系统。
企业系统系统
企业系统系统笼罩了硬件和软件架构,网络拓扑,开发、测试和生产环境等。这些都反响了一个企业的长线投资。在开发前,你需要评估现有的软件和硬件架构,假如它不能完整支撑J2EE的话,你可能会加进新的组件和升级你现有的系统。你需要彻底地评估硬件,包含有盘算机,路由器、交换机和网络拓扑,由于它们都会影响系统的性能和稳固。
多层企业系统拥有以下重要的组件:
.Web浏览器客户端,它可能处在客户端公司的防火墙后面
.HTTP服务器,它通常处在DMZ区
.Web容器主机供给表现或者贸易逻辑组件
.利用容器供给贸易逻辑组件
.关系数据库治理系统(RDBMS)和数据库供给数据和数据逻辑
所应用的系统系统类型是根据你对安全、性能、可靠性的需求以及你公司的财政状态而定的。请求很低时,你甚至可以应用一台二手的盘算机和一条电话线。在Internet上,有很多开放源代码的把持系统、Web服务器、利用服务器和数据库治理系统。这些系统的消费可能只有几百美金,当然,掩护起来可能要麻烦一点。
高真个客户,例如很多华尔街的财政机构,它们需要的是一个支撑安全、高吞吐量和可搪塞不可预计网络通信的系统。在这种情况下,你通常就需要一个n层的系统,该系统带有Web服务器和利用服务器,并且设置为群集而达到容错的目标。
你还需要评估软件架构,包含Web服务器,安全治理软件,利用服务器,域名治理服务器,数据库治理系统和第三方的软件组件,假如你还没有购置你的利用服务器,那么在评估过程中,选择一个J2EE的生产商将是一个重要的部分。我要提示你一点,不同厂家对J2EE的实现是有很大不同的,有一些仅支撑旧的J2EE版本。此外,一些Web容器或者利用容器可能要比其它的快不少。除了实现J2EE规范外,很多的厂家还售卖J2EE系统的组件或者架构。选择一个稳固的J2EE厂家也是重要的,由于这样可以得到长久的支撑。你通常可以购置或者在系统系统级别开发的功效包含有:
。事务处理
。国际化和本地化
。群集和对象散布
。Session治理
。利用性能丈量和描写
。消息
。工作流治理
。进口和个性化治理
。层到层通信协议
。安全和防火墙
利用系统
利用系统建立在企业系统系统之上,指的是一个特别的项目或者利用。在架构完成后,系统建立职员就会研究如何建立一个专门的利用。假如你的企业系统只是支撑一个旧的J2EE版本,你可能就需要首先升级你的系统。假如由于预算或者时间关系而不能做升级,那么就必须在旧版本的技巧限制下工作。重要的是,要建立企业级的可重用组件。终极的目标是要满足客户的需要。
一个系统建立者并不是一个设计者;系统和设计是两件不同的事情。一个利用系统的领域是系统的重要结构、它的系统设计模式以及你可以在上面增长组件的架构。系统重要是涉及实现的非功效性方面,而设计是和贸易的use cases有关,use cases是指你利用来转换域对象模型为一个技巧对象模型的部分。利用系统是项目标结构,一个专门的利用。你通常在利用系统结构开发时要作出的决定包含有:
。层间的功效划分
。模型域对象
。以前的系统需要保存的东西
。购置的软件组件
。需要建立的组件
。如何集成第三方的组件
图3中的订单域对象解释了你如何做到模型化域对象。对于当前的Java技巧,你可以将域对象散布在几个处所,包含有作为开发者治理的持续对象放在Web容器中,作为EJB放在利用服务器中,或者作为存储过程放在RDBMS主机中。
在宠物店的设计图中,我们将订单对象设计为一个实体bean、一个细节的对象和一个数据访问对象,如图5和后面的图6所示。当你看到这些时,你将会熟悉到其系统的重要性。你可以想一下为什么一个在分析模型的域对象被映射为这么多对象,以及假如转变该设计的话,将会产生什么事情。你也许已经听到过EJB的利益,不过要留心的是不同厂家实现起来的性能是有差别的。当新技巧到来时,在将其放在到一个系统之前,你需要做研究并且动手做一些测试。实在所谓系统的开发,就是将设计和实现域对象模型的垂直块转换为设计其它很多域对象。
在J2EE涌现的早期,一些面向对象的设计者尝试将域对象映射到实体bean中,并且将它们在层间传送。他们拥有非常好的UML框图,不过得到的成果是一个慢的系统,这是由于不必要的网络通信造成的。由对象分析直接进进对象设计,而没有一个系统的设计,没有明确地懂得一个新技巧,这样通常都会导致一个项目失败。
可交付的系统
由于J2EE系统是一个相对新的主题,因此一个可交付的J2EE系统并没有很好地定义。在宠物店的例子利用中,是很丢脸出系统在哪里结束和设计在哪里开端。文档由高级别的利用系统检查、Model-View-Controller设计模式的讨论和一个系统概览开端。低级别的文档就是源代码。没有UML框图。Sun的J2EE企业系统认证的委派部分请求所有的可交付系统都用UML表现。不过,这里仅表现为一个类框图、一个组件框图和一些对象交互框图,。这些对于一个真正的J2EE利用来说都是不足够的。要开端的话,系统规范和流程至少需要以下的方面:
.一份系统系统文档,用来描写你现有的硬件、软件、网络拓扑和其它的组件
.一个利用系统文档,用来描写利用的重要结构,包含所有对于系统有重要作用的组件、use case组件和以前的组件的一个逻辑视图
.一个新组件设计领导方针,用来描写所有的设计方针和系统决定,解释全部这些决定,并且阐明假如选择其它的选项会有什么可能的成果。这些方针应当包含所有重要的基础决定,以便进行新组件的设计时可屈服这些规定,以保持系统系统的完整性
。一个工作系统原型来评估新的技巧;从开发和配置J2EE利用中获取经验;建立系统架构;通过丈量性能、扩大性来预示所冒的风险;还有向客户证实你的方法是可行的
在你开发过几个J2EE方案并且获得更多的经验后,原型将不再那么重要,这时一些UML框图和一些设计方针就可能已经足够了。
IV、对象设计
在系统规范的领导下,设计可在技巧上扩大和适应分析的成果。分析阶段时,域对象模型化应当和技巧的细节无关,而对象设计时则是和技巧因素密切相干的,包含在系统开发阶段时,采用哪一类的平台、语言和厂家。理论上,你不要修正贸易对象,除非是为了掩护它们基础的属性和行动而必须这样做。
在系统决定的领导下,一个具体的设计阐明应当提到所有类的规范,包含必要的实现属性,它们具体的接口和伪代码或者把持的纯文本描写。规范的具体程度应当达到只要和模型框图联合,就可得到所有必要的编程信息。在很多主动化的软件生产流程中,你可以从面向对象的框图中产生代码的框架。要留心的是stub和skeleton通常是无需在框图中展现出来的,由于它们对于设计者和编程者来说都是透明的。我在图6中包含它们只是为了阐明EJB的基础点。
在你完成具体的对象设计后,你就完成了域对象的对象相干映射。这样做的原因是,固然面向对象的方法论在目前是比较先进的,不过最风行和持久的商店都是关系型的。此外,一个客户的IT架构在很多方面都已经反响了现有的投资和贸易RDBMS厂家的选择。因此将域对象模型转换为关系模型或者数据库表是非常重要的。有很多容器治理的工具,不过它们不能代替一个好的关系数据库设计。
V、实现
有了一个好的架构和细节设计,实现将是一个很明确的任务。此外,由于我们在系统原型阶段设计和实现了系统的一个垂直部分,因此在实现阶段我们不会碰到很多麻烦事情。在很多公司中,开发者通常都是过早进进实现阶段,特别是当经理在监督他们的时候,由于对于他们,做其它的事情即是糟蹋公司的时间。
成果是,不再花时间来画UML框图,而是在代码开发中测试想法,这要花数星期和几个月的时间,在这种情况下,所有的系统决定和设计都是在代码阶段作出的,通常要在几个月后才会创造开发已经进进了一个毛病的方向。
VI、确认
确认包含有测试以验证该系统符合设计并且满足需求。在全部开发周期中,验证产生在开发和安装阶段。单元测试、集成测试和用户容忍度测试都是重要的主题
VII、组合和配置
组件装配和方案配置在J2EE的开发中是特别重要的。开发和安装的环境可能是完整不同的。假如EJB处在系统中,你需要应用厂家的专门工具来提生产生容器的类,上面我也提到过,Web或者利用组件的配置对于不同的厂家都是不一样的。你还必须考虑要配置的系统是否拥有任何厂家指定的代码实现。在一个可扩大的系统中,系统的结构应当是稳固的,但是应当可以支撑增长配置新的或者旧的组件,而无需影响全部系统。
VIII、运作和掩护
在最后的阶段,利用交付到用户的手中,你必须为他们供给培训、文档和教导。用户将会创造标题和可能会提出新的改良。你必须通过正确地修正治理过程来处理这些需求。你无需为了配置一个新的组件或者调换一个旧的组件而封闭一个正在工作的系统。
系统开发流程
我们必须做很多系统的决定,因此我们必须收拾出一个系统开发的流程。对于一个企业来说,通常有很多利用项目,其中的一些甚至会跨越几年,从而导致系统缭绕很多周期而变更。在你的领域中,很多同样的项目中都会涌现同样的需求。你应当很轻易地重新应用一个扩大的和可重用的系统,它们可能在上个项目周期或者其它的项目中。这样会有一个对广泛架构的需求,可重用的软件架构可为家族式的软件利用供给一个广泛的架构。
假如这是你的首个J2EE项目,你的系统必须被原型化,进行测试、分析,然后再重复。BluePrint供给了很多好的设计领导方针和最佳的练习,宠物店的例子也是一个很好的参考系统。要很快地提出一个好的并且是高质量的解决方案的有效方法是应用和扩大BluePrint参考系统,然后插进到你自己的贸易组件中。
应用参考系统
就我的懂得来说,宠物店系统的本质是Model-View-Controller和Command模型。你可以将这些模型利用到以Web-centric和EJB-centric的系统。对于每个域对象,一个视图是用嵌套的JSP表现。一个controller处理与贸易相干的事件,而域对象封装贸易逻辑、事务和安全。我们应用前台的servlet作为中心的controller,以吸收和解释所有用户的把持。它分派贸易事件到指定的域对象controllers,这些controllers可调用域对象来转变持续的状态。根据这个事件处理的成果,一个controller选择下一个显示的视图。以下的组件对于系统都是很重要的,我们可以修正并且利用在大部分的J2EE利用:
MainServlet: 前台的组件是Web容器和该架构之间的接口
ModelUpdateListener: 是获取模型更新事件的对象的接口
ModelUpdateNotifier:在更新模型事件产生的时候通知监听者
RequestProcessor: 处理由MainServlet吸收的全部恳求
RequestHandler:plug-n-play恳求处理器组件的接口
RequestHandlerMapping:包含有恳求处理器映射规矩
RequestToEventTranslator:根据恳求处理器的映射规矩,中心恳求处理器委派恳求处理到plug-n-play恳求处理组件。到贸易事件的透明http恳求
EStoreEvent: 贸易事件
ShoppingClientControllerWebImpl: Proxy-to-EJB层前台把持器
ScreenflowManager: 把持屏幕流,选择视图
ModelUpdateManager: EJB层模型更新治理器,通报由于一个事件而导致的模型修正
ShoppingClientControllerEJB: EJB层前台,为EJB客户供给远程服务
StateMachine:中心事件处理器,根据状态处理器的映射规矩,委派事件处理至plug-n-play处理器组件
StateHandler: EJB层状态处理器接口
StateHandlerMapping: 包含状态处理器映射规矩
扩大参考系统
BluePrint的例子利用是一个好的出发点,你还应当修正它以配合不同的项目和领域。设计模型是可重用的微系统,你可以应用它来扩大参考系统。BluePrint供给了一个非常有用的J2EE模型目录,而23个“Gang of Four”模型都是极好的资源。例如,假如你想扩大参考系统以支撑工作流治理,你可以在配置或者运行时应用中心controller来动态注册事件处理器。中心controller请求每个注册的事件处理器处理一个事件,直到一个处理器返回一个唆使已经达到命令串末尾的信息。
插进你的贸易组件
J2EE技巧对于每个人都是一样的,但是对于不同的领域,我们需要解决的标题都是不同的。一旦你建立了一个基础的J2EE框架,你就必须利用一些use cases来展现该系统可为你的领域工作。你可以通过选择一些情况,最好是该系统的一个重要的功效,或者应用得最多的而且可带来明显的技巧上的冒险的情况。由域分析模型开端,然后尝试映射你的域对象到高端和低真个设计模型,就象我们在图5和6中的所示。实现低级别的设计模型,并且测试看它是否真正地运作。假如所有都如假想般运作,你就可以再重复上一步,即找冒险的情况、更多的假想来测试以扩大系统的笼罩。在经过重复的验证后,初始化的系统原型应当就会变得稳固。你可以熟悉到哪些组件是可以购置的,旧系统的哪些方面是应当保存的,以及如作甚它们做接口。下一步就是软件设计,你可以应用设计指南中指定的类似方法和流程来进行持续的开发。
按部就班
我们应用了一个流程的情势,将一个复杂的标题分解为几个小的部分,以便我们能更轻易地懂得和解决它们。在这篇文章中,我们将J2EE的开发分解为8个步骤,集中先容了系统和设计。我这里先容了重要的系统主题和作出系统决定的一个流程。我还讨论了J2EE系统的角色和可交付。
学习通过这些步骤来开发J2EE的方案就象学习舞蹈一样。你首先需要自觉和保持不懈地练习基础的舞步。一旦你熟悉了它们,你就会想到将它们放在一起,并且更集中在曲子里每步的大小、速度、流和节奏。不过你不应当被一个流程来限制你的创造力。相反,你应当应用和扩大该流程来满足你的特定需要。要记住,你的终极目标是设计出一个完整的J2EE方案来满足你的客户需求。