??xml version="1.0" encoding="utf-8" standalone="yes"?>久久93精品国产91久久综合,在线视频亚洲一区,国产精品久久久久白浆http://www.aygfsteel.com/guitarpoet/category/8703.htmlJava企业U应用Y件开发探?/description>zh-cnFri, 02 Mar 2007 03:36:30 GMTFri, 02 Mar 2007 03:36:30 GMT60AOP能干什么?http://www.aygfsteel.com/guitarpoet/archive/2006/03/27/37653.htmlguitarpoetguitarpoetMon, 27 Mar 2006 09:46:00 GMThttp://www.aygfsteel.com/guitarpoet/archive/2006/03/27/37653.htmlhttp://www.aygfsteel.com/guitarpoet/comments/37653.htmlhttp://www.aygfsteel.com/guitarpoet/archive/2006/03/27/37653.html#Feedback0http://www.aygfsteel.com/guitarpoet/comments/commentRss/37653.htmlhttp://www.aygfsteel.com/guitarpoet/services/trackbacks/37653.html
AOP是Aspect Oriented Programming的羃写,译成中文就是面向方面编E。它是最q几q流行v来的另一U编E方式?br />
  • 首先QAOP只是OOP的补充,换句话说QProcedure Oriented Programming的工E是很难Q也是几乎不可能使用AOP的?/li>
  • 其次QAOP是对OOPpȝ的纵向切Ԍ从另一个方面上实现?jin)系l解?/li>
  • 再次QAOPlOOP提供?jin)另一U重用的可能?/li>

对于OOPpȝ而言Q系l的解耦主要依赖分层和良好的设计,一般良好的OOP架构没有不采用分层和设计模式的(当然Q分层分得恰当不恰当、模式用得好不好Q跟框架的设计者有着直接的关p)(j)。但是,对于OOPpȝ而言Q它只能到达q一步了(jin)?br />
对于pȝ的必要求,比如日志、错误跟t、访问拦截、权限控制等操作QOOP很难达到八面玲珑?br />
其实Q倒不是OOP一定不能实Cq功能的分离和重用,但是׃那又需要更高层ơ的抽象和封装,凭空增加pȝ的复杂性和使用隑ֺQ又不利于版本控制和发布控制Q一般来_(d)是得不偿q?br />
所以,很多开源项目比如Commons Logging{应q而生Q它们的存在从一定的意义上解决了(jin)q个问题?br />
但是Q还有一U很好的解决Ҏ(gu)Q那是AOPQ实际上AOP是Z(jin)解决q种问题而诞生的Q?br />
AOP既然是OOPpȝ的纵向切Ԍ那么它就应该具备以下几点Q?br />
  1. 切入点(Point CutQ:(x)它需要一个点来切入到OOPpȝ中去Q目前流行的AOP框架都采用从Ҏ(gu)切入的方式?/li>
  2. 切面QAdviceQ:(x)切入之后Q它要做些什么呢Q必d以有一U方式进行定Ӟ目前行的AOP框架都采用Java代码实现的方?/li>
  3. 重用性:(x)一般来_(d)AOP能带来的重用一般都是Advice描述文g的重用,目前所有的AOP的Advice都是Java的Class文gQ这提供了(jin)一U可能,所有的Advice都可以通过打包成Jar的Ş式实现重用?/li>

由此可以看出Q用AOP能够带来的好处是提供?jin)一U抽象模型的方式、一U重用以前工作的方式Q在不更改过ȝ代码的基上添加新的功能、同时也可以重用q去写的AdviceQ?br />
AOPq有一个好处,是减少工作量?br />
因ؓ(f)目前行的AOP框架的PointCut定义一般都支持通配Q这样就可以实现扚w定义和修攏V如果代码有着良好的规范、在良好的设计下Q开发和l护工作量的减少?x)非常可观。而且对于d新的功能不必修改原有的架构设计,从另一斚w也降低了(jin)非常可观的工作量?br />
那么AOP在JavaEE企业U应用中能够起什么作用呢Q?br />
  1. 事务控制Q很多业务逻辑Ҏ(gu)都需要事务控Ӟ通过通配实现事务控制l对是一个节省工作量的好办法Q如果再l合IOC更加可以q事务控制的依赖,实现事务控制灉|更换Q提高了(jin)业务pȝ的重用?/li>
  2. 权限控制Q权限控制到底算不算业务逻辑Q如果不,Z么还要体现在业务逻辑中?通过AOP的方式,可以灉|的实现FilterChain机制Q而业务逻辑的代码可以对其毫无察觉?/li>
  3. 持久层对象的装饰和过滤:(x)可以Ҏ(gu)需要对持久层操作返回的l果q行装饰和过滤,甚至替换Q而对pȝ架构没有M要求。这是最漂亮和最q净的做法?/li>
  4. pȝU别诊断日志Q实现可插拔式系l别日志,q样在系l正常运行后可以ؓ(f)?jin)提高系l性能而不费事的去掉它却不?x)?jing)响到pȝ的稳定?/li>
  5. 业务U别高抽象Q比如可以把工作支持API装Q通过AOP的机制实现MixinQ这样就可以实现工作支持和原业务逻辑分离Q可以分开q行理Q也可以在更高的抽象U别上实现重用?/li>

AOP也不是没有缺点,它本w就有一定的学习(fn)曲线Q而且目前为止有具体意愿的好的实践q不多,而且它也?x)给你的工程带来复杂性,它还?x)给你的代码增加理解的难度(不管你承认不承认Q代码阅ȝ隑ֺ实是跟代码的耦合E度反相关的——虽然这是设计模式所力图解决的问题)(j)

但是Q目前来看适当的用AOPQ给你的目提高灉|性和可维护性,是值得的?img src ="http://www.aygfsteel.com/guitarpoet/aggbug/37653.html" width = "1" height = "1" />

guitarpoet 2006-03-27 17:46 发表评论
]]>
容器和轻量容器http://www.aygfsteel.com/guitarpoet/archive/2006/03/24/37180.htmlguitarpoetguitarpoetFri, 24 Mar 2006 03:58:00 GMThttp://www.aygfsteel.com/guitarpoet/archive/2006/03/24/37180.htmlhttp://www.aygfsteel.com/guitarpoet/comments/37180.htmlhttp://www.aygfsteel.com/guitarpoet/archive/2006/03/24/37180.html#Feedback1http://www.aygfsteel.com/guitarpoet/comments/commentRss/37180.htmlhttp://www.aygfsteel.com/guitarpoet/services/trackbacks/37180.html
JavaEE原话Q?em class="cEmphasis">Containers are the interface between a component and the low-level platform-specific functionality that supports the component. ?br /> 译q来是“容器就是底层的、与支撑q_相关的、对lgq行功能化支持的接口”?br />
难以理解Q?br />
通俗的解释就是,容器是一pdZ(jin)实现分层的概念而定义的一pd功能的^台无关的标准。它的主要用处就是^台无x和底层操作装性(Java的核?j)哲学?j)?br />
说白?jin),容器?em class="cEmphasis">Java的核?j)哲学在企业U应用范围内的具体实现?br />
那么使用容器Q能l我们带来多大的好处呢?

  1. 强制性分层:(x)通过Java的接口定义机制和强类型编译器的支持,在底层就实现?jin)分层的概念。即佉K层的实现十分没有l验Q底层的分层q是可以辨认的?/li>
  2. 底层操作装Q以服务端应用服务器Z?j)的三层企业开发涉?qing)到的技术相当麻?ch)和复杂Q但是之间又有相当多的共性,所以进行有效的底层ơ的装是可行的而且是有必要的。这样开发h员的工作可以徏立在一个稳固的基础上,而不是靠自己的经验去应对q些问题?/li>
  3. q_无关性:(x)q个也是Java的核?j)哲学,至于好处吗,我就不多说?jin)
  4. 代码的重用可能性提高:(x)CQ是可能性。具体的重用性要看开发的方式和开发后代码的质量?/li>

JavaEE而言Q它的标准里面只有WEB容器和EJB容器Q这两个容器已经充分体现?jin)它们的概念?br />
但是Q还有一U概念上的容器,它的概念与上q概念不同,所以被UC轻量U容器?br />
首先Q轻量容器不是接口的抽象,没有JavaEE概念中的部v和移除,从概念上说轻量容器是一个拥有IOC支持的Bean工厂?br />
从Ş象的角度上来看,轻量U容器是一个盒子,盒子里面装满?jin)?chung)有标{JavaBeanQ对外界而言Q它是一个魔盒,只要l它一个咒语(咒语必须正确Q,它就能给你一个礼物?br />
轻量U容器目前而言没,有相应的标准Q但是它的用范围却比真正的JavaEE标准要宽泛得多(谁不喜欢C物呢?Q?br />
  • 首先Q它是一个非常好的JavaBean工厂Q谁没用q工厂模式?Q?/li>
  • 其次Q它能够l你的代码带来IOC支持Q懒人最喜欢的生zL式莫q于东西自己来找它)(j)
  • 再次Q一般来_(d)轻量U容器都可以通过动态代理和字节码增强的方式提供AOP的支?/li>

总而言之,轻量U容器是JavaEE容器概念的一U有力补充,它的用法更加灉|Q适用的范围更q,从目前的l验上看Q开发、测试和理h也要比标准容器对象开发v来简单?br />
  • 轻量U容器一般不?x)给你提供分布式和集的支持Q因为它的优点就是灵z而不W重?/li>
  • 轻量U容器就像作汉堡的那两块面包Q你惛_什么就往里夹Q但是汉堡好吃不好吃Q主要就在你放进ȝ东西和搭配的手艺?/li>
  • 轻量U容器不能强制的要求你分?/li>
  • 轻量U容器的底层装一般以模块加蝲q容器的方式实现?/li>
  • 有的Z爱吃汉堡?/li>

M评h(hun)Q?br />
容器是Java的核?j)哲学的体现Q而轻量容器则是工程师开发文化的体现Q它可以很灵zȝ帮助你,对你没有什么具体的要求。二者不?x)出现谁替代谁的情况。具体的使用方式Q还得看你在设计时所处的情况?br />
更正一下:(x) JavaEE而言Q它的标准里面只有WEB容器和EJB容器是对它的服务端而言的。客L(fng)q有Application Container和Applet Container两个容器?img src ="http://www.aygfsteel.com/guitarpoet/aggbug/37180.html" width = "1" height = "1" />

guitarpoet 2006-03-24 11:58 发表评论
]]>
企业U应用ؓ(f)什么要分层Q?/title><link>http://www.aygfsteel.com/guitarpoet/archive/2006/03/20/36392.html</link><dc:creator>guitarpoet</dc:creator><author>guitarpoet</author><pubDate>Mon, 20 Mar 2006 09:29:00 GMT</pubDate><guid>http://www.aygfsteel.com/guitarpoet/archive/2006/03/20/36392.html</guid><wfw:comment>http://www.aygfsteel.com/guitarpoet/comments/36392.html</wfw:comment><comments>http://www.aygfsteel.com/guitarpoet/archive/2006/03/20/36392.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/guitarpoet/comments/commentRss/36392.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/guitarpoet/services/trackbacks/36392.html</trackback:ping><description><![CDATA[ 首先Q需要知道什么是企业U应用?br /><br /><span style="font-weight: bold;">企业U应用(enterprise applicationsQ?/span>Q其实是一个Y件行业内部通用的一个术语。如果解释成通俗易懂的话来说Q那是一个企业范围内所使用的、基于计机的稳定的、安全的和高效的分布式信息管理系l?br /> 对于企业U应用而言它的分布式有两种形式QB/Sl构和C/Sl构。由于浏览器的功能日益强大、网|术的日益行和应用服务器软g和中间g产品的逐步? 熟,B/Sl构的企业应用已经成ؓ(f)一U流行的势Q所以在下面的讨Z所谓的企业U应用统一为基于B/Sl构的分布式企业信息pȝ?br /><br /> 一般说来企业应用都可以分Z?a title="持久层(Persistence LayerQ? >持久层(Persistence LayerQ?/a> ?a title="业务逻辑层(Business Logic LayerQ? >业务逻辑层(Business Logic LayerQ?/a> ?a title="展现层(Presentation Layer Q? >展现层(Presentation Layer Q?/a> ?br /> Z么要分这么几个层ơ呢Q?<br /> 归根l底主要原因只有一个——那是提高软g开发生产力Q降低Y件开发成本,提高软g产品质量?br /> 因ؓ(f)软g公司也是资本公司Q公司的主要目标是盈利而不是科技发展。所以,公司的技术架构的优劣主要应该体现在公司的生成本和品的质量上?br /> 对于降低软g产品的开发成本是软g产品出现以来所有Y件公司所q求的目标。到目前为止Q达到这个目标的方式有这么几U:(x)<br /><ol><li>? 软g产品Ҏ(gu)功能q行分解Q分别开发:(x)对于大的复杂pȝQ如果没有很好的分解开发的话,其结果是不可惌的。现实中企业需要分开各个职能部门Q它们的职责 和业务是不同的,q样开发中需要根据业务进行Q务分解,把大的系l分解成为小的业务系l。这h能够实现pȝ开发过E中的ƈ行开发,q且?x)培M务专_h 员,提高开发的效率?/li><li> 业务pȝҎ(gu)技术架构进行分层开发:(x)分层的开发方式实C(jin)人类对复杂事物的普遍处理方式——分而治之。通过把复杂的pȝ分解成ؓ(f)相对单的独立pȝQ低? 合的分解既可以实现开发h员的q行工作Q又可以实现开发h员的d分工。而且通过分层Q对lgD和流水化作业提供?jin)理论和事实的基?</li><li> lgD实现C会(x)化分工:(x)不必自己d造轮子,直接付钱M惌的轮子即可。这是从传统的制造行业借鉴来的l验。J2EE得到的广泛认同从实质上体C(jin)业界对这U方式的肯定? </li><li> q去l验的积累和U篏资源的重复利用:(x)重用一直是一个争议比较大的东西,争论的双方各执一词,各有道理也各有大师助阵,但是那更多的是在理论上和技术层? 上。理论和技术上的争论对商业软g开发是无用的。因为商业化的Y件开发,最重要的是提供优质的品和服务q且能够最大可能的获取利润。所以,抛开具体实现 方式不谈Q我个h觉得公司q去l验的积累和U篏资源的重复利用是有商业h(hun)值的。因Y件公司必d面对开发h员流动的问题Q不是升迁q是调动q是xQ? 软g公司M(x)面对业务专精人员的流失问题。业务专_h员的失造成的成本是要计在开发成本中的,所以怎样以固化的形式U篏业务人员的经验,和过去解决问 题的Ҏ(gu)的可重复利用以及(qing)新员工职业培训成本的降低在降低开发成本的斚w是值得考虑的?/li></ol>lg所qͼ对于一个企业应用框架Q还有h开发企业应用不用框架吗?Q而言Q分层是提高开发效率、降低开发和培训成本的最?jng)_跉|案之一?br /> 但是Qؓ(f)什么要分ؓ(f)<a title="持久层(Persistence LayerQ? >持久层(Persistence LayerQ?/a> ?a title="业务逻辑层(Business Logic LayerQ? >业务逻辑层(Business Logic LayerQ?/a> ?a title="展现层(Presentation Layer Q? >展现层(Presentation Layer Q?/a> 3层呢Q?br /> 其实q三层不q就是从三个不同的视角去看这个企业信息系lŞ?jin)。从数据的角度看Q企业信息系l不外乎是Ҏ(gu)据的存取。从功能的角度看Q企业信息系l就? 对现实中的业务逻辑操作的信息化抽象而从用户的角度上看,它是一个h机接口,它可以接受输入ƈ且会(x)Ҏ(gu)做的输入做出相应的反应。这三层从底向上实现?jin)底? 计算机数据和层人的业务操作的跨,一般说来,从概念上Ԍ所有的企业U应用框枉可以分成q三层,因ؓ(f)q三个视角是客观的。但是这q不保证所有的企业 U应用都能保证这三个层之间不发生耦合?img src ="http://www.aygfsteel.com/guitarpoet/aggbug/36392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/guitarpoet/" target="_blank">guitarpoet</a> 2006-03-20 17:29 <a href="http://www.aygfsteel.com/guitarpoet/archive/2006/03/20/36392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͩ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ǹ</a>| <a href="http://" target="_blank">׼</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">첼</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ǭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ij</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">罭</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƾ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">廪</a>| <a href="http://" target="_blank">ڻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>