在架构结果的指导下,详细设计工作应该说明所有类的规|包括必须实现的属性、它们的详细接口和伪代码或操作的U文本描q。规D明应该够详l得和模型囄合时Q它可以提供所有必ȝ~码信息。在许多自动化Y件生产过E中Q我们可以从面向对象囄成代码框架。图5? 说明了对一些领域对象的高层和详l设计对象。注意桩QstubQ和框架QskeletonQ在图中l常是不可见的,因ؓ它们对设计h员和~程员来说是透明的。我它们包括在?中以说明EJB的基部分?nbsp;
? 对象设计模型Q订单EJB详细设计
在完成了详细对象设计后,q需要完成领域对象的对象-关系映射。原因是虽然面向对象Ҏ学现在非常流行,但是大多数流行且成熟的持l性存储却是关pd的。另外,在许多情况下Q客LIT基础设施已经反映了对商业RDBMS供应商的投资和偏爱。所以,领域对象{换成关系模型或数据库表是非常重要的。虽然有许多容器理的持l性工P但它们不能取代好的关pL据库设计?nbsp;
5?nbsp;实现
在良好的架构和详l设计条件下Q实现应该是一个明的d。另外,因ؓ我们设计和实现架构原型阶D늚U向联合部分Q所以实现阶D应该更没有什么值得惊讶的。在许多l织中,开发者经常过早地到达实现阶段。尤其当理者盯着开发h员确保在~码Q而不是做他们认ؓ在浪费公司时间的其他事情Ӟq种情况变得更加严重?nbsp;
l果Q不再花数小时或数天l出UML草图Q而是通常在发Ҏ周或数月~码的同时测试自qx。由于在q种情况下,所有地架构军_和设计都是在~码阶段做出来的Q所以经常过了数月后才发现开发的方向出错了?nbsp;
6?nbsp;验证
验证包括试验证pȝ按设计要求运行ƈ满需求。验证过E发生在整个开发生命周期的开发和产品环境中。单元测试、集成测试和用户试本n是非常重要的主题?nbsp;
7?nbsp;装配和部|?nbsp;
构g装配和解x案部|在J2EE开发中特别重要。开发和产品环境可能非常不同。如果EJB在系l中Q你需要用供应商特定的工具得到容器自动生成的c,因ؓQ正如我以前指出的,Web和应用程序构仉|对不同的供应商来说是不同的。你也必考虑要部|的pȝ是否含有供应商特定代码实现。在可扩展架构中Q系l结构应该是E_的但也应该在不媄响整个系l的条g下支持新或老构件的增量部v?nbsp;
8?nbsp;q行和维?nbsp;
在最后阶D,应用E序C用户手中Q你必须l他们提供培训和文。用户会发现错误q可能要求新Ҏ。你必须适当地改变管理过E来处理q些情况。你不必Z部v一个新构g或取代老构件而关闭一个正在运行的pȝ?nbsp;
架构开发过E?nbsp;
知道了必d多架构决定,因此我们必须为架构开发描l一个过E。对于一个企业来说通常有许多应用项目,它们中的一些可能跨数q_l果是系l演化包含许多周期。在你的领域里存在着许多跨越多个目的通用需求。你应该不费力地在它的生命周期或其他目中用以前项目周期的可扩展且可重用的架构。ؓ一pd软g应用提供同属l构和行为的通用框架和可重用软g架构是非帔R要的?nbsp;
如果是第一个J2EE目Q架构必d原型、测试、度量、分析ƈ在P代中q行推敲。蓝图提供了许多好的设计指导和实践,宠物店示例程序可以作Z个很好的参考架构。最有效地快速、高质量发布好的解决Ҏ的方法是接受和扩展蓝囑֏考架构ƈ插入你自q业务构g。你最后要做的是攚wR轮?nbsp;
接受一个参考架?nbsp;
我的理解,宠物店架构的_֍是模?视图-控制和命令模式。你可以这些模式应用到以WebZ心和以EJBZ心的pȝ中。对于每个领域对象,视图用嵌套的JSP表示。控制器处理相关的业务事Ӟ领域对象装业务逻辑、事物和安全。我们用门户servlet作ؓ中心控制器接受和截获所有用L动作。它业务事件分发给特定的调用领域对象改变持l状态的领域对象控制器。依靠事件处理结果,控制器选择下一个要展现的视图。下面是我们可以修改q在大多数J2EE应用E序中用的主要构gQ?nbsp;
a?nbsp;MainServletQ门hӞWeb容器和框架之间的接口
b?nbsp;ModelUpdateListenerQ获得模型更C件对象的接口
c?nbsp;ModelUpdateNotifierQ当更新模型事g发生旉知侦听?nbsp;
d?nbsp;RequestProcessorQ处理所有从MainServlet来的h?nbsp;
e?nbsp;RequestHandlerQ即插即用请求处理构件接?nbsp;
f?nbsp;RequestHandlerMappingQ包含请求处理映规?nbsp;
g?nbsp;RequestToEventTranslatorQ中心请求处理器Ҏh处理映射规则代理x即用h处理构g的请求。将httph转换Z务事?nbsp;
h?nbsp;EstoreEventQ业务事?nbsp;
i?nbsp;ShoppingClientControllerWebImplQ代理EJB层门h制器
j?nbsp;ScreenflowManagerQ控制屏q流Q选择视图
k?nbsp;ModelUpdateManagerQEJB层模型更新管理器Q通知什么模型由于事件发生了改变
l?nbsp;ShoppingClientControllerEJBQEJB层门P为EJB客户提供q程服务
m?nbsp;StateMachineQ中心事件处理器Q根据状态处理映规则代理即插即用处理构件的事g处理
n?nbsp;StateHandlerQEJB层状态处理接?nbsp;
o?nbsp;StateHandlerMappingQ包含状态处理映规?nbsp;
扩展参考架?nbsp;
虽然蓝图CZE序是一个好的v点,但应该根据每个项目或领域修改它。设计模式是可重用的微体pȝ构,可以使用它扩展参考架构。提供了一l有用的J2EE模式目录的蓝囑֒23?四h?模式都是非常不错的资源。例如,如果x展参考架构支持工作流理Q你可以在部|或q行时动态地在中心控制器注册事g处理器。中心控制器会询问每个注册的事g处理器直C个处理器q回消息表明C命o铄末端?nbsp;
插入你的业务构g
J2EE技术对每个人都是一LQ但是不同的领域Q我们要解决的问题是不同的。一旦徏立了一个基本的J2EE框架Q必dC些用例来说明架构实可以Z的领域服务。可以通过选用捕获pȝ关键功能的场景来实现Q这些场景经怋用来展现关键的技术风险。从领域分析模型入手Q可以象我们在图5?中那样将领域对象映射成高层和低层设计模型。实C层设计模型ƈ试是否真正在工作。如果每件事都按计划q行Q那么重新评估风险开始下一个P代,扩展要考虑的场景ƈ选择更多的场景扩展架构的覆盖范围。经q几ơP代后Q原始的架构原型应该变得E_。识别要购买的构Ӟ要保留的遗留pȝ和怎样它们对接。下一步是软g设计Q你可以使用设计指导中规定好的类似方法和q程l箋开发?nbsp;
一步一?nbsp;
我们使用一个过E来一个复杂问题分解ؓ较小的几个问题,q得我们可以更Ҏ的理解和解决它们。在本文中,我们J2EE开发分解ؓ八个步骤Q主要集中在架构和设计。我已经阐述了重要的架构qؓ架构军_提供了一个过E。我也讨ZJ2EE架构师的角色和可交付产品?nbsp;
学习使用q些步骤开发J2EE解决Ҏp学习跌的步骤一栗首先需要自觉ƈ持之以恒地练习基本步骤。但是,一旦你对它们相当熟悉后Q应该将它们攑֜一起ƈ注意力更多地集中在规模、速度、流和特定上下文中每一步的节奏。但永远不要让一个过E限制了创造性。而应该接受和扩展q程以满qD需要。记住,最l目的是提供满客户需求的完整的J2EE解决Ҏ?nbsp;
Java2企业版(J2EEQ^台由四个关键部分构成Q规D明、参考实现、兼Ҏ测试套件和蓝图QBluePrintQ计划。蓝图描l了分布式组件架构最好的实践和设计指导方针。本文基于Rationall一q程和BluePrintCZE序介绍一个八步骤J2EE开发方法学。通过阅读q篇文章Q你可以了解许多重要的J2EE架构的话题,q且能够扩展和修改这个简单的Ҏ来解册q有的业务问题?nbsp;
在商业世界里Q我们用Java2 企业版(J2EEQ解决业务问题、开发商业Y件或者提供{包服务。如果一家公司想使用多层体系l构建造一个电子商务网站,通常在整个开发生命周期中需要涉及到理者、架构师Q设计h员、编Eh员、测试h员和数据库专家?nbsp;
Z使不同部门能高效率地工作Q他们经帔R要一个Y件开发过E。一些经典的开发过E包括瀑布模型、快速应用开发(RADQ和极限~程QXPQ。本文我们将集中于一个流行的软g工程q程Q即Rationall一q程QRUPQ。RUP提供了一个给角色分配d和责ȝ严格Ҏ。它的目标是保证我们在预期的q度和预内开发出满用户需求的高质量Y件?nbsp;
我在J2EE开发中使用RUPZ以下三个原因。首先,RUP以架构ؓ中心Q在资源分配给全面开发之前,它先开发一个可执行的架构原型。其ơ,RUP是P代ƈZ构g的。该架构基线通常包括一个框架或基础设施以便于通过q代增加构gQ在不媄响系l其他部分的前提下定制和扩展一个系l的功能。最后,RUP利用一门工业标准语a--UMLQ可视化建模pȝ的架构和构g。RUP有四个不同的开发阶D:初始、细化、构造和UM。然而,本文从技术角度覆盖了J2EE开发的八个必要zdQ主要集中在pȝ架构?nbsp;
1?nbsp;需求分?nbsp;
需求分析描q系l应该做什么或不应该做什么得开发者和客户可以{v一份原始的商业合同。可以用业务概c领域术语、用例和用户界面QUIQ模型Ş成功能需求文。对于非功能需求,如性能和事务,可以在需求文档附件中详细说明。根据参与项目深度的不同Q确定在U怸q是使用HTML建造高层UI模型?nbsp;
? 展现了一个典型电子商务系l中的两个用例。查看订单(viewOrderQ用例告诉我们一个用户通过Web界面登陆pȝ、查看订单列表,点击链接查看特定订单的详l信息。增加订单项QaddLineItemQ用例告诉我们浏览品列表、选择感兴的产品q将它们d到购买订单中?nbsp;
2?nbsp;面向对象分析
分析人员构造问题领域模型:cR对象和交互。分析应该与技术和实现l节无关Qƈ包含一个理想的模型。对象分析可以帮助理解问题ƈ获得关于问题领域的知识。因Z务过E的改变比信息技术的改变要慢得多Q所以必要l持一个不含技术细节的U领域模型?nbsp;
q两个步?-需求分析和面向对象分析--不是J2EEҎ的;对许多面向对象方法学来说Q它们都非常通用。图2 昄了一个宠物店CZE序的高层对象分析模型。它用图例说明了我们从需求分析用例中识别的主要概c我们把q些概念建模成对象ƈ标识它们的关pR?nbsp;
需求和对象分析的结果是为J2EE架构的开发提供切入点。ؓ了开发架构,可以选择一个纵向联合部分(vertical pieceQ?-l常是关键部分,如订单领域对象模?-q行对象设计、实现、测试和部v。(U向联合部分Q一个RUP概念Q是指系l的一部分。v始点是图1所C的用例子集和图3所C的领域分析模型。一个纵向联合部分的实现l果是一个全功能的微系l,包括UI层的JSPQ中间层业务对象如EJB和后端数据库。)可以从原型中获得的l验应用于领域对象ƈ作ؓ对象设计阶段的指对{?nbsp;
3?nbsp;架构规格说明
l过前面两个步骤Q业务领域问题和需求应该比较明了。现在,我们工作集中在技术策略和架构上。架构是指所有构件组合定义系l的一个蓝图:l构、接口和通讯机制。我们可以进一步将架构分ؓ企业U和应用U架构?nbsp;
企业U系l架?nbsp;
企业U系l架构包括硬件和软g基础设施、网l布局、开发、测试、生产环境等{。它反映了一个企业的长期投资。开发前Q需要评估已存在的Y件和g基础设施Q如果不完全支持J2EE的话Q增加新构g更新已存在系l。你需要彻底地评估gQ包括计机、\由器、网l{换器和网l布局Q因为它们都影响到系l的性能和可靠性。图4 昄了一个可能的多层|络布局?nbsp;
如图4所C的一个多层企业架构包括以下几个主要构gQ?nbsp;
一个Web览器客LQ可能在也可能不在客Ll织的防火墙?nbsp;
一个HTTP服务器,是一个对公众开攄Web服务器。它通常位于一个称作DMZ的子|内
Web容器主表C层和可能的业务逻辑构g
应用E序容器M务逻辑构g
关系数据库管理系l(RDBMSQ和数据库主数据、数据逻辑
你用的pȝ架构cd依赖于安全、性能和可靠性的需求,也依赖于l织的胦政状c在~少l验的情况下Q也可以适当C一个修理厂电话订购一台简单地二手计算机。Internet上有许多开放源代码的操作系l、Web服务器、应用程序服务器和数据库理pȝ。得到这些系l的代h只是几百元和熬几个通宵?nbsp;
象许多华街金融机构q样的高端客户也讔R要一个连l支持安全、高吞吐量交易和不可预料|络通讯的系l。在q种情况下,Z定wQ通常需要将Web服务器和应用E序服务器集配|成一个n层架构?nbsp;
q需要评估Y件基设施Q包括Web服务器、安全管理Y件、应用程序服务器、域名管理服务器、数据库理pȝ和第三方软g构g。如果还没有购买应用E序服务器,选择一个J2EE供应商将是评估过E的一个重要方面。应该注意到不同的供应商对J2EE的实现程度是不同的,一些供应商只支持老的J2EE版本。另外,一些Web容器或应用程序容器可能比其他的速度要快。除了实现J2EE规范外,许多供应商还出售J2EE基础构g或框架。选择一个稳定的提供支持的J2EE供应商也非常关键。你可以在系l基设施层面上购买或开发的通用功能包括Q?nbsp;
事务
国际化和本地?nbsp;
集群和对象分?nbsp;
应用E序性能度量和剖?nbsp;
通讯
工作管?nbsp;
入口和个性化理
层对层通讯协议
安全和防火墙
应用架构
应用架构参考一个特定的目和规范徏立在企业U系l架构的上层。在基础设施完成后,架构师研I怎样构造一个特定的应用。如果你的企业架构仅部分支持老的J2EE版本Q可以先升你的pȝ。如果由于预或旉关系不能升Q那么必d更老版本规定的技术范围内开展工作。虽然构造企业重用构g非常重要Q但是必首先要能够使用。这里的最l目标是满客户的需?-一ơ一个项目?nbsp;
架构师不是设计师Q架构和设计是完全不同。一个应用架构的范围包括pȝ的主要结构、架构设计模式和可以在上面增加构件的框架。架构主要关注的是非功能性方面,而设计关注应用业务用例将领域对象模型转换成技术对象模型。应用架构是目的结构,一个特D的应用E序。通过应用架构开发,你通常必须要做的应用架构决定包括:
层之间进行功能划?nbsp;
领域对象建模
要保护的遗留pȝ
要购买的软g构g
要开发的构g
怎样集成W三Ҏ?nbsp;
?的订单领域对象说明了怎样寚w域对象进行徏模。利用当前的Java技术,可以领域对象分布在作ؓ开发者管理持l性对象的Web容器中、应用程序服务器的EJB中或者作为RDBMS宿主的Java存储q程中?nbsp;
在宠物店蓝图中,我们订单对象设计成一个实体beanQ一个详l对象和一个数据访问对象,如图5和后面的?所C。当你看到这个的时候,你应该意识到架构的重要性。ؓ什么分析模型中的一个领域对象映成q么多对象?如果改变设计Q会出现什么问题?你也许听说过EJB的好处,但是要注意不同供应商的性能是不同的。当一U新技术到来的时候,你需要在投入全面设计之前q行一些研I。你可以l常地将设计和实现领域对象模型纵向联合部分的l验应用到其他许多领域对象中。这是架构开发的内容?nbsp;
? 企业U架构:|络布局
如图4所C的一个多层企业架构包括以下几个主要构gQ?nbsp;
一个Web览器客LQ可能在也可能不在客Ll织的防火墙?nbsp;
一个HTTP服务器,是一个对公众开攄Web服务器。它通常位于一个称作DMZ的子|内
Web容器主表C层和可能的业务逻辑构g
应用E序容器M务逻辑构g
关系数据库管理系l(RDBMSQ和数据库主数据、数据逻辑
你用的pȝ架构cd依赖于安全、性能和可靠性的需求,也依赖于l织的胦政状c在~少l验的情况下Q也可以适当C一个修理厂电话订购一台简单地二手计算机。Internet上有许多开放源代码的操作系l、Web服务器、应用程序服务器和数据库理pȝ。得到这些系l的代h只是几百元和熬几个通宵?nbsp;
象许多华街金融机构q样的高端客户也讔R要一个连l支持安全、高吞吐量交易和不可预料|络通讯的系l。在q种情况下,Z定wQ通常需要将Web服务器和应用E序服务器集配|成一个n层架构?nbsp;
q需要评估Y件基设施Q包括Web服务器、安全管理Y件、应用程序服务器、域名管理服务器、数据库理pȝ和第三方软g构g。如果还没有购买应用E序服务器,选择一个J2EE供应商将是评估过E的一个重要方面。应该注意到不同的供应商对J2EE的实现程度是不同的,一些供应商只支持老的J2EE版本。另外,一些Web容器或应用程序容器可能比其他的速度要快。除了实现J2EE规范外,许多供应商还出售J2EE基础构g或框架。选择一个稳定的提供支持的J2EE供应商也非常关键。你可以在系l基设施层面上购买或开发的通用功能包括Q?nbsp;
事务
国际化和本地?nbsp;
集群和对象分?nbsp;
应用E序性能度量和剖?nbsp;
通讯
工作管?nbsp;
入口和个性化理
层对层通讯协议
安全和防火墙
应用架构
应用架构参考一个特定的目和规范徏立在企业U系l架构的上层。在基础设施完成后,架构师研I怎样构造一个特定的应用。如果你的企业架构仅部分支持老的J2EE版本Q可以先升你的pȝ。如果由于预或旉关系不能升Q那么必d更老版本规定的技术范围内开展工作。虽然构造企业重用构g非常重要Q但是必首先要能够使用。这里的最l目标是满客户的需?-一ơ一个项目?nbsp;
架构师不是设计师Q架构和设计是完全不同。一个应用架构的范围包括pȝ的主要结构、架构设计模式和可以在上面增加构件的框架。架构主要关注的是非功能性方面,而设计关注应用业务用例将领域对象模型转换成技术对象模型。应用架构是目的结构,一个特D的应用E序。通过应用架构开发,你通常必须要做的应用架构决定包括:
层之间进行功能划?nbsp;
领域对象建模
要保护的遗留pȝ
要购买的软g构g
要开发的构g
怎样集成W三Ҏ?nbsp;
?的订单领域对象说明了怎样寚w域对象进行徏模。利用当前的Java技术,可以领域对象分布在作ؓ开发者管理持l性对象的Web容器中、应用程序服务器的EJB中或者作为RDBMS宿主的Java存储q程中?nbsp;
在宠物店蓝图中,我们订单对象设计成一个实体beanQ一个详l对象和一个数据访问对象,如图5和后面的?所C。当你看到这个的时候,你应该意识到架构的重要性。ؓ什么分析模型中的一个领域对象映成q么多对象?如果改变设计Q会出现什么问题?你也许听说过EJB的好处,但是要注意不同供应商的性能是不同的。当一U新技术到来的时候,你需要在投入全面设计之前q行一些研I。你可以l常地将设计和实现领域对象模型纵向联合部分的l验应用到其他许多领域对象中。这是架构开发的内容?nbsp;