??xml version="1.0" encoding="utf-8" standalone="yes"?>国产在线观看高清视频,日本欧美精品久久久,偷拍自拍在线视频http://www.aygfsteel.com/masen/category/45120.htmlzh-cnFri, 09 Jan 2015 10:54:13 GMTFri, 09 Jan 2015 10:54:13 GMT60UML中关pd??http://www.aygfsteel.com/masen/articles/422141.htmlMasenMasenThu, 08 Jan 2015 13:52:00 GMThttp://www.aygfsteel.com/masen/articles/422141.htmlhttp://www.aygfsteel.com/masen/comments/422141.htmlhttp://www.aygfsteel.com/masen/articles/422141.html#Feedback0http://www.aygfsteel.com/masen/comments/commentRss/422141.htmlhttp://www.aygfsteel.com/masen/services/trackbacks/422141.html关系列表Q?/h2>
  1. l承关系(Generalization)Q?/li>
  2. 实现关系(Realization)Q?/li>
  3. 依赖关系(Dependency)Q?/li>
  4. 兌关系(Association)Q?/li>
  5. 有方向的兌(DirectedAssociation)Q?/li>
  6. 聚合关系(Aggregation)Q?/li>
  7. l合关系(Composition)Q?/li>

l承关系QGeneralizationQ:

Class Bl承与Class A

l承指的是一个类Q称为子cR子接口Q承另外的一个类Q称为父cR父接口Q的功能Qƈ可以增加它自q新功能的能力Q承是cMcL者接口与接口 之间最常见的关pM一Q在Java中此cdp通过关键字extends明确标识Q在设计时一般没有争议性;

实现关系QRealizationQ:

Class A实现了Interface A

 

实现指的是一个classcd现interface接口Q可以是多个Q的功能Q实现是cM?口之间最常见的关pM一Q在Java中此cdp通过关键字implements明确标识Q在设计时一般没有争议性;

依赖关系QDependencyQ:

ClassA依赖于ClassB

 

可以单的理解Q就是一个类A使用C另一个类BQ而这U用关pLh偶然性的、时?的、非常弱的,但是Bcȝ变化会媄响到AQ表现在代码层面QؓcB作ؓ参数被类A在某个methodҎ中用;

兌关系QAssociationQ:

ClassA与ClassB怺兌

 

q里的关联关pd的比较细Q把怺兌和有方向的关联区分开了,怺他体现的是两个类、或?cM接口之间语义U别的一U强依赖关系Q是一U长期的E_的关p;表现在代码层面,兌cMcd性的形式出现在关联类中,也可能是兌cd用了一个类 型ؓ被关联类的全局变量Q?/p>

有方向的兌QDirectedAssociationQ:

ClassA兌于ClassB

 

是关联的一U特别Ş式,是单向的Q表现在代码层面Qؓ被关联类B以类属性的形式出现在关联类 A中,也可能是兌cA引用了一个类型ؓ被关联类B的全局变量Q?/p>

聚合关系QAggregationQ:

计算?has-a cpu

 

聚合是关联关pȝ一U特例,他体现的是整体与部分、拥有的关系Q即has-a的关p,此时?体与部分之间是可分离的,他们可以h各自的生命周期,部分可以属于多个整体对象Q也可以为多个整体对象共享;比如计算ZCPUQ表现在代码层面Q和?联关pL一致的Q只能从语义U别来区分;

l合关系QCompositionQ:

孕妇 contains-a 胎儿

 

l合也是兌关系的一U特例,他体现的是一Ucontains-a的关p,q种关系比聚合更 强,也称为强聚合Q他同样体现整体与部分间的关p,但此时整体与部分是不可分的,整体的生命周期结束也意味着部分的生命周期结束;孕妇M胎儿自然也就 MQ表现在代码层面Q和兌关系是一致的Q只能从语义U别来区?/p>

Masen 2015-01-08 21:52 发表评论
]]>
q程调用Ҏ的比较(转)http://www.aygfsteel.com/masen/articles/323234.htmlMasenMasenThu, 10 Jun 2010 06:57:00 GMThttp://www.aygfsteel.com/masen/articles/323234.htmlhttp://www.aygfsteel.com/masen/comments/323234.htmlhttp://www.aygfsteel.com/masen/articles/323234.html#Feedback0http://www.aygfsteel.com/masen/comments/commentRss/323234.htmlhttp://www.aygfsteel.com/masen/services/trackbacks/323234.html几种通讯协议的比?/div>
一、综q?/div>
本文比较了RMIQHessianQBurlapQHttpinvokerQweb service{?U通讯协议的在不同的数据结构和不同数据量时的传输性能?/div>
RMI是java语言本n提供的远E通讯协议Q稳定高效,是EJB的基。但它只能用于JAVAE序之间的通讯?/div>
Hessian和Burlap是caucho公司提供的开源协议,ZHTTP传输Q服务端不用开防火墙端口。协议的规范公开Q可以用于Q意语 a?/div>
Httpinvoker是SpringFramework提供的远E通讯协议Q只能用于JAVAE序间的通讯Q且服务端和客户端必M?SpringFramework?/div>
Web service是连接异构系l或异构语言的首选协议,它用SOAP形式通讯Q可以用于Q何语aQ目前的许多开发工具对其的支持也很好?/div>

试l果昄Q几U协议的通讯效率依次为:
RMI > Httpinvoker >= Hessian >> Burlap >> web service
RMI不愧是JAVA的首选远E调用协议,非常高效E_Q特别是在大数据量的情况下,与其他通讯协议的差距尤为明显?/div>
HttpInvoker使用java的序列化技术传输对象,与RMI在本质上是一致的。从效率上看Q两者也相差无几QHttpInvoker?RMI的传输时间基本持q?/div>
Hessian在传输少量对象时Q比RMIq要快速高效,但传输数据结构复杂的对象或大量数据对象时Q较RMI要慢20%左右?/div>
Burlap仅在传输1条数据时速度可Q通常情况下,它的毫时是RMI?倍?/div>
Web Service的效率低下是众所周知的,q_来看QWeb Service的通讯毫时是RMI?0倍?/div>




二、结果分?/div>
1、直接调?/div>
直接调用的所有毫旉接近0Q这说明E序处理几乎没有p旉Q记录的全部旉都是q程调用耗费的?/div>
2、RMI调用
与设想的一PRMI理所当然是最快的Q在几乎所有的情况下,它的毫时都是最的。特别是在数据结构复杂,数据量大的情况下Q与其他协议的差距尤 为明显?/div>
Z充分发挥RMI的性能Q另外做了测试类Q不使用SpringQ用原始的RMI形式Q承UnicastRemoteObject对象Q提供服 务ƈq程调用Q与Spring对POJO包装成的RMIq行效率比较。结果显C:两者基本持qISpring提供的服务还E快些?/div>
初步认ؓQ这是因为Spring的代理和~存机制比较强大Q节省了对象重新获取的时间?/div>
3、Hessian调用
caucho公司的resin服务器号U是最快的服务器,在java领域有一定的知名度。Hessian做ؓresin的组成部分,其设计也非常 _高效Q实际运行情况也证明了这一炏V^均来看,Hessian较RMI要慢20%左右Q但q只是在数据量特别大Q数据结构很复杂的情况下才能体现?来,中等或少量数据时QHessianq不比RMI慢?/div>
Hessian的好处是_高效Q可以跨语言使用Q而且协议规范公开Q我们可以针对Q意语a开发对其协议的实现。目前已有实现的语言 有:java, c++, .net, python, ruby。还没有delphi的实现?/div>
另外QHessian与WEB服务器结合非常好Q借助WEB服务器的成熟功能Q在处理大量用户q发讉K时会有很大优势,在资源分配,U程排队Q异 常处理等斚w都可以由成熟的WEB服务器保证。而RMI本nq不提供多线E的服务器。而且QRMI需要开防火墙端口,Hessian不用?/div>
4、Burlap调用
Burlap与Hessian都是caucho公司的开源品,只不qHessian采用二进制的方式Q而Burlap采用xml的格式?/div>
试l果昄QBurlap在数据结构不复杂Q数据量中等的情况下Q效率还是可以接受的Q但如果数据量大Q效率会急剧下降。^均计 ,Burlap的调用毫时是RMI?倍?/div>
我认为,其效率低有两斚w的原因,一个是XML数据描述内容太多Q同L数据l构Q其传输量要大很多;另一斚wQ众所周知Q对xml的解析是比较 费资源的Q特别对于大数据量情况下更是如此?/div>
5、HttpInvoker调用
HttpInvoker是SpringFramework提供的JAVAq程调用ҎQ用java的序列化机制处理对象的传输。从试l果看, 其效率还是可以的Q与RMI基本持^?/div>
不过Q它只能用于JAVA语言之间的通讯Q而且Q要求客L和服务端都用SPRING框架?/div>
另外QHttpInvoker q没有经q实늚验,目前q没有找到应用该协议的项目?/div>
6、web service调用
       本次试选用了apache的AXISlg作ؓWEB SERVICE的实玎ͼAXIS在WEB SERVICE领域相对成熟老牌?/div>
Z仅测试数据传输和~码、解码的旉Q客L和服务端都用了~存Q对象只需实例化一ơ。但是,试l果昄Qweb service的效率还是要比其他通讯协议?0倍?/div>
如果考虑到多个引用指向同一对象的传输情况,web service要落后更多。因为RMIQHessian{协议都可以传递引用,而web service有多个引用Q就要复制多䆾对象实体?/div>
Web service传输的冗余信息过多是光度慢的原因之一Q监控发玎ͼ同样的访问请求,描述相同的数据,web serviceq回的数据量是hessian协议?.5倍。另外,WEB SERVICE的处理也很毫Ӟ目前的xml解析器效率普遍不高,处理xml <-> bean很毫资源。从试l果看,异地调用比本地调用要快,也从侧面说明了其毫时主要用在~码和解码xml文g上。这比冗余信息更Z重,冗余信息占用?只是|络带宽Q而每ơ调用的资源耗费直接影响到服务器的负载能力。(MS的工E师曾说q,用WEB SERVICE不能负蝲100个以上的q发用户。)
试q程中还发现Qweb service~码不甚方便Q对非基本类型需要逐个注册序列化和反序列化c,很麻烦,生成stub更篏Q不如spring + RMI/hessian处理那么畅z。而且Qweb service不支持集合类型,只能用数l,不方ѝ?lt;/b>


Masen 2010-06-10 14:57 发表评论
]]>Java企业U应用架构设计中的分布式l构Q{Q?/title><link>http://www.aygfsteel.com/masen/articles/321913.html</link><dc:creator>Masen</dc:creator><author>Masen</author><pubDate>Wed, 26 May 2010 07:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/masen/articles/321913.html</guid><wfw:comment>http://www.aygfsteel.com/masen/comments/321913.html</wfw:comment><comments>http://www.aygfsteel.com/masen/articles/321913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/masen/comments/commentRss/321913.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/masen/services/trackbacks/321913.html</trackback:ping><description><![CDATA[<span style="font-size: 12px; line-height: 26px; "> <ul class="con" style="padding-top: 10px; padding-right: 24px; padding-bottom: 0px; padding-left: 24px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 26px; font-size: 14px; "> <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><span style="font-size: 12px; "> </span></p> <div id="wmqeeuq" class="sum" style="padding-top: 0px; padding-right: 24px; padding-bottom: 0px; padding-left: 24px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "> <ul class="summary" style="padding-top: 8px; padding-right: 16px; padding-bottom: 4px; padding-left: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; line-height: 24px; width: 554px; font-size: 14px; color: #005197; background-color: #fefde8; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: #dde6f1; border-right-color: #dde6f1; border-bottom-color: #dde6f1; border-left-color: #dde6f1; ">Java企业U应用架构设计是每个Java开发者不必学的知识,本文对Java EE应用的架构与设计q行一些基性的介绍Q而这些内Ҏ{了整个Java EE应用开发的基础?/ul> </div> <ul class="con" style="padding-top: 10px; padding-right: 24px; padding-bottom: 0px; padding-left: 24px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 26px; font-size: 14px; "> <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "></p> <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">Java企业U应用架构设计中的分布式l构大致可以分ؓ单l构?U结构?U结构和NU结构。充分理解和应用分布式结构可以更好的理解当代|络计算的现Ӟ设计出更优的企业U应用程序?/p> <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">长久以来QJava企业U版本(Java EEQ已l成Z众多产业领域Q如银行业、保险业、零售业、酒店业、旅怸以及电信业等{)q行企业商务应用开发和部v的^台选择。Java EE之所以应用如此广泛,其原因在于,Java EE可以为构建健壮、高扩展性的分布式应用系l提供标准化的^収ͼ而这些应用所支持的范围可以涵盖从银行核心业务q作Q到航空公司订票引擎之间的广大区域。不q,开发成功的Java EE应用也可能成Z艰巨的dQJava企业U应用架构设计在其中L重要作用?/p> <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">首先Java EEq_自n所提供的丰富选择p可以令h生畏。那些过剩的框架、实用程序类库、集成开发环境(IDEQ,以及可供选择的工兯一切都更加富有挑战性。因此,选择好合适的技术对于开发基于Java EE的Y件来说至关重要。而那些拥有健壮架构与设计准则的技术,会对构徏易于l护、重用以及扩展的应用pȝ大有裨益?br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> 我们首先回一下分布式计算的进化史以及nU结构。之后我展CJava EEq_是如何解军_布式应用开发中的难点的。同时你q会了解模型-视图-控制器(MVCQ结构准则。然后我会结合MVC准则与Java EEq_Q来讲解多层Java EE应用l构?br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> 在了解了应用pȝ架构之后Q我把注意力集中到Z面向对象原则的Java EE应用开发上。我同时q会讲解如何使用设计模式来简化设计过E,以及如何选择最佳的实践范例。此外我q会触及Sun公司的Java BluePrints所收录的设计模式目录,其内容在Deepak Alur et al的《核心J2EE设计模式》(Prentice Hall出版C,2003q_一书中有详l的介绍。在文章的最后,我将介绍通用建模语言QUMLQ以及其在可视化Java EE文档设计与架构之中所扮演的的角色?br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">分布式计进化史</strong><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> 在分布式计算中,一个应用会被划分ؓ若干E小的部Ӟq同时运行在不同的计机上。这U计方式又被称?#8220;|络计算”Q因些部仉常会通过建立在TCP/IP或者UDP协议之上的某些协议进行通讯。这些稍的应用部g被称?#8220;U?#8221;Q每一U都可以向其他连接独立提供一cL务。?#8220;U?#8221;又可以被l化q?#8220;?#8221;Q以侉K低功能的_度。大多数Java企业U应用架构设计都应具有三个不同的层:</p> <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">◆表现层负责用户接口?/p> <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">◆业务层执行业务逻辑。在q行q程中,它还会与数据讉K层进行交互?/p> <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">◆数据访问层负责对存储在企业信息pȝQEISQ中的数据进行存取等操作?br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> 通过分析分布式计结构的跃迁Ԍ我们可以更好的理解当代网l计的现状。在接下来的几节中,我将用几个恰当的例子介绍分布式结构的变迁?br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">单l构<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> </strong> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> 单l构的用可以追溯到那些使用易终端连接巨型主机的日子。在q种l构中,用户接口、业务逻辑以及数据{所有应用构成层都被配置在同一个物理主Z。用户通过l端机或控制Cpȝq行交互Q而这U方式只h非常有限的文本处理能力(参见?Q?/p> <p align="center" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><img class="fit-image" height="179" alt="Java企业U应用架构设计中的单层结? src="http://images.51cto.com/files/uploadimg/20090825/1345190.jpg" width="330" border="0" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <font size="2" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">?. 单层l构Q图中文字:Console—?#8220;控制?#8221;QDumb Terminal—?#8220;易终?#8221;QMainframe——主机)</font></p> <p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">2U结?br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> </strong> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> ?980q代早期Q个人电脑(PCQ变得非常流行,它比大型L便宜Q处理能力又比简易终端之cȝ讑֤强。PC的出Cؓ真正的分布式Q客L——服务器QC/S)计算铺^了道路。作为客L的PC现在可以独立q行客户接口QUIQ程序,同时它还支持囑Ş化客h口(GUIQ,允许用户输入数据Qƈ与服务器Lq行交互Q而服务器L现在只负责业务逻辑和数据的部分。当用户在客L完成数据录入后,GUIE序可以选择性的q行数据有效性校验,之后数据发送给服务器进行业务逻辑处理。OracleZ表单的应用就?U结构的优秀范例。表单的GUI存储在客LPC中,而业务逻辑Q包括代码以及存储过E)以及数据仍然保留在Oracle的数据库服务器中?br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> 此后又出C另外一U?U结构,在这U结构中Q不只是用户接口QUIQ,q业务逻辑也被攑ֈ了客L一U。这U应用的典型q行方式是直接连接数据库服务器进行各U数据库查询。这U客L被称?#8220;胖客L”Q因U结构将可执行代码的相当大一部分都放C客户端一U(参见?Q?/p> <p align="center" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><a target="_blank" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: underline; color: #0000ff; "><img class="fit-image" height="313" alt="Java企业U应用架构中?U结? src="http://images.51cto.com/files/uploadimg/20090825/1345191.jpg" width="406" border="0" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <font size="2" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">?. 2U结构(Business Logic Layer——业务逻辑层;Optional——可选;User Interface Layer——用h口层QThick Client——胖客户端;Data Access Layer——数据访问层Q?Mainframe Server——服务器LQ?/font></p> <p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">3U结?/strong><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> 管2U?#8220;胖客L”应用的开发很单,但是M用户接口或者业务逻辑的改变所D的Y件升U都需要在所有客L上进行。幸q的是,在上世纪90q代中期Q硬件成本已l变得越来越低,而CPU的运能力却得到了巨大提升。与此同Ӟ互联|的发展非常q速,互联|应用的发展势已经逐渐昄Q两者的l合最l导致了3U结构的产生?br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> ?U结构模型中QPC客户端只需要安?#8220;瘦客L”软g——比如浏览器——来昄服务器提供的展示内容Q服务器负责准备展示内容、业务逻辑以及数据讉K逻辑Q应用程序的数据来自企业信息pȝQ例如关pL据库。在q样的系l中Q业务逻辑可以通过q程讉KQ因此通过Java控制台应用程序支持一个独立的客户端就成ؓ评。业务层主要通过数据讉K层与信息pȝ实现交互。因为整个应用都位于服务器之上,因此q样的服务器也被UC“应用E序服务?#8221;或?#8220;中间?#8221;Q参见图3Q?/p> <p align="center" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><a target="_blank" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: underline; color: #0000ff; "><img class="fit-image" height="355" alt="Java企业U应用架构中?U结? src="http://images.51cto.com/files/uploadimg/20090825/1345192.jpg" width="551" border="0" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> <font size="2" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">?. 3U结构(图中文字QPresentation Layer——表现层QBusiness Logic Layer——业务逻辑层;Data Access Layer——数据访问层QThin Client——瘦客户端;Application Server——应用程序服务器QEnterprise Data——企业数据;Database Server——数据库服务器)</font></p> <p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">NU结?br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> </strong> <br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /> 随着互联|带宽的不断提高Q全世界的各大企业都相启动了他们的|络服务。这U变化导致应用服务器无法l箋承担表现层的巨大负荷。这Q务现在已l由专门负责产生展示内容的专门网|务器所承担。展C内容之后被传送到客户端的浏览器上,览器会负责用h口表现出来。NU结构中的应用服务器负责提供可远E访问的业务逻辑lgQ而表现层|页服务器则使用本网协议通过|络讉Kq些lg。图4展示了nU结构?/p> <p align="center" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><a target="_blank" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: underline; color: #0000ff; "><img class="fit-image" height="312" alt="Java企业U应用架构中的NU结? src="http://images.51cto.com/files/uploadimg/20090825/1345193.jpg" width="599" border="0" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /></a> </p> <p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">以上是Java企业U应用架构设计中的分布式l构Q在不同的需求和应用场景中,我们会用C同的分布式结构,设计不同的Java企业U应用架构?/p> </ul> <p> </p> </ul> </span> <img src ="http://www.aygfsteel.com/masen/aggbug/321913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/masen/" target="_blank">Masen</a> 2010-05-26 15:17 <a href="http://www.aygfsteel.com/masen/articles/321913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式与J2EEhttp://www.aygfsteel.com/masen/articles/128987.htmlMasenMasenMon, 09 Jul 2007 02:34:00 GMThttp://www.aygfsteel.com/masen/articles/128987.htmlhttp://www.aygfsteel.com/masen/comments/128987.htmlhttp://www.aygfsteel.com/masen/articles/128987.html#Feedback0http://www.aygfsteel.com/masen/comments/commentRss/128987.htmlhttp://www.aygfsteel.com/masen/services/trackbacks/128987.html模式与J2EE
blueski推荐 [2005-3-24]
出处Q来自网?/font>
作者:不详
 

信息工程是以当前数据pȝ为基Q在一个企业或企业的主要部门,关于信息pȝ的规 划、分析、设计和构成的一整套怺兌的正规化、自动化的技术应用?

--- James Martin 

    正如上面信息工程的创始hJames MartinZ息工E的概念所做定义类|模式(Patterns)的创始h建筑师Christopher Alexander?lt;模式语言Q?977?979>一书中Ҏ式的概念q行了如下描q?附注Q书名后面的q䆾代表在各个不同时期的作品Q下面Ş式同?Q?br /> 每一个模式描qC一个在我们周围不断重复发生的问题,以及该问题的解决Ҏ的核心。这P你就能一ơ又一ơ的使用该解x案而不必做重复力_。每个模式是׃部分l成的一个规则,q个规则描述特定环境、问题和解决Ҏ之间的关pR简单的_没有一个模式是独立的实体,每个模式都存在着怺支持Q但支持的程度不同:大的模式可以内嵌的模式Q同{层ơ的模式q列存在Q而小的模式被嵌入到大的模式之中?
--- Christopher Alexander  

    模式的概念在软g行业被采用以后,得到的广泛的发展Q现在已l存在许多种cd的模式应用,其中比较有名的箸作有QGoF(Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四hQ简UͼGang of Four[GoF])?lt;设计模式Q?995>QMartin Fowler?lt;分析模式Q?997>QFrank Buschmann{h?lt;体系l构模式Q?996?000>、Jim O.Coplien、Niel Harrison{h?lt;~程模式Q?995?996?998?999>和Deepak Alur{h?lt;J2EE核心模式Q?001>{,其中最具媄响的是GoF?lt;设计模式>一书,书中详细讨论了三U类型,?3U模式。好的设计源于工作中l验的积累,当设计用标准的模板以模式的方式q行交流Ӟ模式成了交和重用的强大机Ӟq且可以改善设计和开发Y件的方式。模式可以帮助我们在一个特定的环境里整理ƈ记录已知的可重现的问题及解决ҎQƈ且通过模式来与他h交流q些知识Q这些模式可以解军_不同环境中重复出现的问题。模式可以设计重复使用Q重复用已知的解决Ҏ可以~短设计和开发应用的周期Q有效的使用模式Q可以我们q离重复投资的怪圈。模式的关键在于单性和可重现性?br />     举一个模式应用的单示例。例如,在你的便携式电脑上运行一个进E中的对象,q且q些对象需要和q行在另一q程中的别的对象通信Q也许这一q程q不在你的便携式电脑上,而在别的地方。你又不惌pȝ中的对象担心如何扑֯|上的其他对象或者执行远E过E调用。这Ӟ可以使用代理(Proxy模式Q详见GoF?lt;设计模式>一?模式来解册个问题,你能做的事就是ؓq个q程对象在你的本地过E中建立一个代理对象,该代理对象和q程对象h相同的接口。你的本地对象利用通常处理q程中的消息发送来和代理交谈。这时代理对象负责把消息传送给实在对象Q而不实在对象位于何处?br />     ׃下面要讲的Java 2q_的企业版(J2EE)应用模式中很多用C设计模式与重?Refactoring)的概念,所以在此有必要再概要介l一下重构的概念。重构已l被证明可以L软g的腐朽和衰|Q关于重构方面的有名怽当然首推是Martin Fowler所写的<重构Q?999>一书了Q书中详l介l了重构的七大类型,?0余种具体的重构手法,同时也指出测试机制在重构中的重要性。书中Martin Fowler寚w构的概念q行了详l说明:
    重构是对软g内部l构的一U调_目地是在不改变[软g之可察行为]的前提下Q提高其可理解性,降低其修Ҏ本。重构是一U有U律的、经q训l的、有条不紊的E序整理ҎQ可以将整理q程中不心引入的错误的机率降到最低,本质上说Q重构就是在代码写好之后改进它的设计。重构之前,首先查自己是否有一套可靠的试机制Q这些测试必L我检验能力?br />

--- Martin Fowler 

    建立于Java~程语言和Java技术基之上的J2EEq_是最适用于企业分布式环境的应用l构Q它被设计ؓ面向多层体系的结构。J2EE包含下面关键技术:Java服务器页?Java Service PageQJSP)、Servlet、Enterprise JavaBeans(EJB)lg、Java消息服务(Java Message ServiceQJMS)、JDBC和Java命名与目录接?Java Naming and Directory InterfaceQJNDI)。由于J2EEq_是分层系l,所以我们将J2EE的层ơ模型化Q这个模型得我们将职责逻辑地分C同的层中Q共分了五个层次Q客户层、表C层、业务层、集成层和资源层。因为客户层和资源层q不是J2EEq_直接x的问题,所以后面介l的15个J2EE应用模式全部属于上面五层中的中间三层Q其中表C层模式包含与Servlet和JSP技术相关的模式、业务层模式包含与EJB技术有关的模式、集成层模式包含与JMS和JDBC有关的模式。具体模式可参看下面表格Q?br />
表一Q表C层模式
模式?/strong> 单描q?/strong>
截取qo?Intercepting Filter) 促进h的预先处理和后处?/td>
前端控制?Front Controller) 提供h处理的集中控制器
视图助手(View Helper) 把与表示层格式化无关的逻辑装到助手组?/td>
复合视图(Composite View) 从原子的子组件创Z个聚集视?/td>
工作者服?Service To Worker) 合ƈ分发者组件、前端控制器和视囑֊手模?/td>
分发者视?Dispatcher View) 合ƈ分发者组件、前端控制器和视囑֊手模式,把许多动作推q到视图处理


表二Q业务层模式
模式?/strong> 单描q?/strong>
业务委托(Business Delegate) 把表C层和服务层分隔开Qƈ且提供服务的外观和代理接?/td>
值对?Value Object) 通过减少|络对话Q以加速层之间的数据交?/td>
会话外观(Session Facade) 隐藏业务对象复性,集中化工作流处理
复合实体(Composite Entity) 通过把参数相关的对象分组q单个实体beanQ表C计粗_度实体bean的最好经?/td>
值对象组装器(Value Object Assembler) 把来自多个数据源的值对象组装成一个复合值对?/td>
值列表处理器(Value List Handler) 理查询执行、结果缓册Ӏ以及结果处?/td>
服务定位?Service Locator) 装业务服务查找和创建的复杂性,定位业务服务工厂


表三Q集成层模式
模式?/strong> 单描q?/strong>
数据讉K对象(Data Access Object) 抽象数据源,提供Ҏ据的透明讉K
服务Ȁ发器(Service Activator) 加速EJBlg的异步处?/td>

    ׃J2EE模式众多Q篇q有限,q里只概要介l其中的一U应用模?- 集成层的数据讉K对象(DAO)模式Q有兴趣的读者可以参看下面参考文献中的资料?br /> 数据讉K对象模式

数据讉K对象模式

1、问?br />     Ҏ数据源不同,数据讉K也不同。根据存储的cd(关系数据库、面向对象数据库{?和供应商不同Q持久性存?比如数据?的访问差别也很大。当业务lg(如会话bean)或表C组?如助手组?需要访问某数据源时Q它们可以用合适的API来获得连接性,以及操作该数据源。但是在q些lg中包含连接性和数据讉K代码会引入这些组件及数据源实C间的紧密耦合。组件中q类代码依赖性应用E序从某U数据源q移到其它种cȝ数据源将变得非常ȝ和困难,当数据源变化Ӟlg也需要改变,以便于能够处理新cd的数据源?br />
2、解x?br />     使用数据讉K对象(DAO)来抽象和装所有对数据源的讉K。DAO理着与数据源的连接以便于索和存储数据QDAO实现了用来操作数据源的访问机制。依赖于DAO的业务组件ؓ其客L使用DAO提供了更单的接口QDAO完全向客L隐藏了数据源实现l节。由于当低层数据源实现变化时QDAO向客L提供的接口不会变化,所以该模式允许DAO调整C同的存储模式Q而不会媄响其客户端或业务lg。重要的是,DAO充当lg和数据源之间的适配器?br />
3、实现策?br />     通过调整抽象工厂(Abstract Factory)模式和工厂方?Factory MethodQ这二个创徏型模式的实现详情可参看GoF?lt;设计模式>一?模式QDAO模式可以辑ֈ很高的灵zd?

  • 当低层存储不会随着实现变化而变化时Q可以用工厂方法模式来实现该策略,以生应用程序需要的大量DAOQ如下面cd1所C?
  • 当低层存储随着实现的变化而变化时Q策略可以通过使用抽象工厂模式而实现。抽象工厂可以基于工厂方法实现而创建,q可使用工厂Ҏ实现Q该{略提供一个DAO的抽象工厂对象,其中该对象可以构造多U类型的具体的DAO工厂Q每个工厂支持一U不同类型的持久性存储实现。一旦你获取某特定实现的具体DAO工厂Q你可以使用它来生成该实C所支持和实现的DAOQ如下面cd2所C?



4、应?br />     当数据访问代码被直接嵌入到有其他不相兌责的某类中时Q就会修改变的十分困难。这时可以采用分L据访问代码的解决ҎQ将数据讉K代码抽取C个新cMQƈ且把该新c逻辑或者物理地Ud到离数据源比较近的位|,q样可以增强模块性和可重用性,如下面图3所C。具体作法可以用提炼类(Extract ClassQ一U重构手法,l节可参看Martin?lt;重构>一?Ҏ创徏一个新c,q将原来cM把数据访问代码移动到q个新的数据讉K对象(DAO)c,使用q个新的DAO对象从控制器cM讉K数据?br />     CZQ持久性逻辑被嵌入到一个用新DAO对象理的持久性的某企业新DAO对象中,把持久性代码和该企业新DAO对象代码l合h会创q、紧密耦合的代码。当持久性代码是该企业新DAO对象的一部分Ӟ对该持久性存储的M改动都要求更改该新DAO对象的持久性代码。这U耦合对企业新DAO对象代码l护会带来负面的影响。下面图4用分L据访问对象方法对其进行重构改q后的结果?br />


    ?5个J2EE模式中,每个模式都作用于设计模式和构架模式之间的某些斚w。每个模式不是孤立存在的Q需要其它模式的支持才能更加体现其含义和用处Qؓ了最大限度的用好模式Q还需要充分理解模式之间的关系?

参考文?

 

  • pȝ分析员教E?--- |晓沛等?
  • 设计模式Q可复用面向对象软g的元?--- 李英军等?
  • 重构-改善既有代码的设?--- 侯捷{译
  • J2EE核心模式 --- 牛志奇等?
  • UML_a(W二? --- 徐家译

 

 



Masen 2007-07-09 10:34 发表评论
]]>
վ֩ģ壺 | ½| ˮ| ʯ| | | | ˳| ƽ| | | ¡| ϲ| | ˳| | | ʡ| | ȫ| ®| | ͩ| Դ| | | | ֱ| ó| | | | ʳ| ǫ| | ָɽ| | Ϫ| ɳ| | ƺ|