ICANN认证国际域名顶级注册机构
网站建设,域名注册,空间租用,软件销售,广告设计 域名注册,空间租用, 网站建设,东莞网页设计,域名注册,网站推广,网站开发,网页设计 网站推广,,百度推广,新浪推广,雅虎推广,网易推广 标志设计,画册设计,包装设计,VI策划,企业形象顾问 连邦软件加盟店,提供销遥行,管家婆,速达,用友ERP,诺顿等软件报价及销售 建站必读 腾达网络,上网帮助中心, 腾达为东莞等地,提供网站建设,网站推广,广告设计,软件销售等优质服务!
建站必读


 
 
当前位置:首页 -> 建站必读 -> .NET技术
推荐一种EJB设计模式
/**

* 此文从重粒子空间转而来,已经原作者的同意

* 在看此文前,请先看Sun的一篇文章

* http://developer.java.sun.com/developer/technicalArticles/ebeans/ejbperformance/

*/





//----------------------------------------原文发下



呵呵,我试试,我的表述和组织能力不是很好 ^o^    





--------------------------------------------------------------------------------



【老实和尚】 于 2001-4-11 10:09:07 加贴在 重粒子空间 ↑   



/**

* 过一阵会忘记的倒可能不会,因为毕竟做得太多,但将它能写出来,倒是能将思* 路更清晰些,但真正让我动笔,却是因为重粒子相邀

*/



在这里肯定是 EntityBean了[无论是BMP还是CMP都是可行的,因为在这里已经不是讨论EntityBean居竟如何实现这一层,而是它如何面向它的Client端(一般是application,javaBean等),给它的client端以什么方法去使用的问题]



题外话:由此而产生的其它好处是我始料未及的,这已经超出了上边的文章的所介绍的好处,这也是我为什么要推荐它的原因



上边这篇文章介绍了三种模式

第一种模式[Using Separate Methods to Access Individual Attributes]

就不用多说,一个EntityBean,你得到一个Remote Interface后想怎么就怎么,看起来很自由,但比如,你的 EntityBean有30个字段/属性,如果你想更新其中的18个字段(这种要求我想是很常见的),你不得不用你的Remote.setXXX()18次,这可是18次远程访问,除非你确定你的client端和你的server端是在同一个container中,否则即使你的client端和你的EntityBean在同一台机器,在同一个application内,它也是RemoteCall,因为对于container来说,它是Remote,照sun的说法,Remote Call是expensive,将加重你的server的负担,这我们能理解吧。



这种模式还有第二个更严重的弊端,就是Transaction不能保证,在你的client的一个方法中Remote.setXXX()18次,其中任何一次均可能发生错误而中断(如你的数据过长…),但你却无法保证它的事务Rollback,除非你手写代码来保证,如果你真这么做,我想bea公司的人会落泪,那可是20000美金的东东呵,被人束之高阁,所以,在clien端再写transaction是不可取的。



那我们如何解决它呢,用第二种模式Using a Value Object for All Attributes

将所有的字段抽象成一个对象

用一句话来描述它的,在上一种模式中,你是在你的client端分18次将你的属性set给EntityBean,而在这种模式你是在你的client端先将你的所有属性(30种)全设置好,已经构造了一个Model(就是你的EntityBean抽象出来的一个普通的类,如果不明白,看一下文章就应该知道了),在你的client端只要调用一个Remote方法,如Remote.updateMember(Model myModel),这个方法传进去的是一个完整的对象,而不是一个一个的属性,俗点说,就是"打包上传" ^o^,性能的好处就不说了,具体实现参考文章中有,也不多说



再来谈谈它的事务的保证,由于它在打包的过程中并没有真正去更改EntityBean(也就是不涉及DB的操作),你交给EntityBean的是一个包,那么,在EntityBean的内部updateMember()方法中将此包的属性释放出来,如

public void updateMember(Model myModel){

xxx1 = myModel.getXXX1();

xxx2 = myModel.getXXX2();

……

}

我们知道,在一个EntityBean中要实现它的Transaction是很容易的,这也是Ejb的特点,CMP和BMP如何实现,不用我说了



文章还推荐了第三种模式Using Multiple Value Objects

其实是第二种模式的变种,就是你可以将你的18种属性抽象成一个Model,而不是30个全部属性,实现起来是一样的。



///~对文章的描述结束



//=========

讲讲我所发现的附加好处,从oo的角度来说,有点让人兴奋



第一 -- valid Check

   我一直不推荐将EntityBean写得太过复杂,现在出来了个Model,好了,全在client端的,来吧,将它写复杂吧,全在它里边实现吧

试想,你的一个属性,如 price,显然是不能为 character的,那么,怎么来保证呢?有三种方法

   方法一:在你的client端接收值时进行验证,如果void,return false;这是最一般的方法,有点臭;因为这使你的代码太无效,因为你可能要在3-5个地方进行同样的验证(你的price可不是只在一个地方要用的呵),copy--paste到第3次的时候,你可能已经对自己不满了吧 -- 评价:臭

   方法二:在你的Ejb中进行验证,如果void,return fasle;

这种方法,解决了上一方法的弊端,因为你在Bean中写一次后,别的clien端不用再写,但它带来了第二个恶果,系统性能恶化(为什么?),试想,你一次一次的将你的price1、price2次给你的Bean去验证(这可是Remote Call),然后返回false,就象你千里迢迢去找你的女友,你的女友一见面,d
 
 
本站关键词:
|网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用||网站制作|网站开发|东莞域名空间|东莞广告公司|东莞广告设计|网站建设东莞|东莞网站制作|东莞网站推广|东莞国内域名注册|网页开发|域名注册|空间租用|
域名注册 | 虚拟主机 | 网站建设 | 网站推广 | 广告设计 | 帮助中心 | 软件中心 | 关于腾达
东莞市腾达信息工程有限公司      本站网络实名: 东莞网站建设
地址:东莞市新城市中心区第一国际B座610   邮编:523007
电话:0769-22026071 22026072 传真:0769-22026076 24小时服务热线:13712032014
© 2002~2005 腾达网络   版权所有