分享
 
 
 

Jive笔记6 --Database Package下面的暗黑世界

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Jive笔记6 --Database Package下面的暗黑世界

Jive笔记6 --Database Package下面的暗黑世界

Written by Shyguy

2002/12/27

Jive再牛B,归根到底还是要和Database打交道的。还不是要调用getConnection(),CreateStatement(),ResultSet.next()。

那么,我的疑问是,Jive是怎样处理低层操作类(DBForumMessage/DBForumThread/DBForum)之间的耦合关系的呢?

由于存在了Cache,所以,DBForumFactory/DBCacheManager/DBForumXXX这些类之间的关系可谓是错综复杂。

(1)真正实作中,我们怎样来完成加载一个ForumMessageObject? 还有thread的增加删除Message是怎样完成的?

打开DBForumMessage.java,发现,除了完成ForumMessage Interface的方法以外,还有几个Private的方法和Protected的方法。

分别是:

private void loadFromDb();

private void saveToDb();

protected void insertIntoDb();等

上面三个函数分别用来完成对jiveMessage表的SELECT/UPDATE/INSERT操作。

所以初步可以判定,对jiveMessage表的操作,基本上封装在了DbForumMessage里边了。但不是全部,为什么?慢慢往下看。

a.加载DbForumMessage

非常简单,地球人都知道的代码。在一个构造函数中调用loadFromDb(),然后执行SELECT xxx,xxx,..WHERE id=...,如果rs为空则抛出

MessageNotFoundException,否则,一个一个的把字段内容复制给DBForumMessage的成员变量。

(顺便这里提一下,这些映射数据库字段的成员变量有些是Private的,有些是Protected,为什么呢?呵呵。)

对于这样的加载方法,如果没有Cache,将会非常慢的。试想,每次显示一个Message都要一次Select,我浏览Thread页面的时候,一次显示n个Thread/Message,....

还不要数据库的小命啊。

在我克隆Jive的过程中,由于Cache机制将在以后实现,所以采取了一个折衷的办法。改写了DBMessageIterator()类,改原来的只取ID

为 取回除了Body以外的所有的内容,并且 直接就地New DBForumMessage,然后复制到ArrayList。

至于Body,则采用LazyLoad的方法,等用到了才去SELECT body FROM ...

这样处理,由于有ResultFilter的限制,最多复制几十个没有Body的DBForumMessag 对象,这对于AppServer来说,我想影响不大吧?

b.增加DBForumMessage

也就是调用INSERT INTO jiveMessage啦。不过,注意到,在插入新的ForumMessage纪录的时候,ThreadID是必须的,

所以看起来只能让DBForumThread来调用这个方法了。难怪!!用了protected insertIntoDb(DbForumThread)!! 原来,同在一个包下的class是

可以互相访问protected的方法的。偶java基本功不行,呵呵,到了今天才发现的这种现象。

c.删除DBForumMessage

这个比较有趣,DBForumMessage没有任何执行DELETE FROM jiveMessage的代码,看起来一定是在外边DBThread实现了。

毕竟,这个是thread的事情嘛。果不出所料,DbForumThread::deleteMessage()里边直接执行了DELETE SQL.

我自己在Clone Jive的时候,还是作了小改动,给DbForumMessage添加了protected deleteFromDb()方法,把执行SQL的操作放给Message完成了。

在对Message进行Add/Delete操作过程中,可不能忘记了Cache List的更新,所以必须记得在DbForumMessage中调用cacheManager的一些方法

来更新Cache,虽然目前在我的系统中,这些函数是空的 :)。

明白了Thread/Message之间的"父子关系",Forum/Thread Category/Forum之间的关系也就差不多啦。哦,Jive中的Category好像有点特别,

等偶下次看了代码再另外详细汇报。

(2)DBForumFactory是个什么东西?

Jive2.1.1以后,DbForumFactory不给Source了,而且,JAD还很难反编译,因为我发现JAD无法反编译诸如synchronized(Object){}这样的代码。

还好我们有Jive 2.1.1的代码。哈哈。看看再说。

先把DBForumFactory的身份给揭穿。其实DbForumFactory是个总管。总管Forum/Thread/Message。

所以,我们在调用API的时候,都是通过Factory.getForum()/getThread()/getMessage()来获得那些对象。

Jive用了SingleTon保证DbForumFactory()唯一,即静态方法DbForumFactory.getInstance()。

同时,DBForumFactory在构造函数中New了一个DatabaseCacheManager。因此Factory和CacheManager就这样勾结起来了。

所有调用getForum(),getThread(),getMessage(),都是调用DatabaseCacheManager的相关方法来实现的。

例:

DBForumFactory::getThread() ==> DatabaseCacheManager.getThread() ==> Search Cache or new DbThread object

结论,DbForumFactory不是东西。除了检测Licese是否合法,其它基本上就是一个二道贩子。

(3)其实还有那些Thread/Message的DbIterator,在Jive笔记4中已经提到了。不必再罗嗦一遍。

写了这么多,感觉还有好多东西没有讲。我希望大家能够仔细体味里边的protected 属性/方法,我认为,这些东西其实和友元差不多,

它们部分的打破了封装,但是获得了很大的灵活性。

退后一步想想,我们只要把那些东西一股脑儿的限制在database package里边,对于整体上的封装,还是没有什么影响的。

呵呵,一家之言,请大家不吝指教

Shyguy

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有