Jive中的设计模式问题

03-06-26 onlylx
最近看了Jive的源码,感觉收获极大。就想把一些方法在我们的项目中应用,但是遇到了一些问题,请各位大虾指教!

Jive 中针对论坛中的对象定义了一系列的接口,比如:Forum,ForumThread,ForumMessage等,通过ForumFactory可以创建这些对象。然后Jive针对这些接口做了数据库的实现,比如DbForum,DbFrumThread,DbForumMessage,DbForumFactory等,这样创建对象的话必须要通过工厂。

但是这些工厂创建的都是比较简单的对象,比如对于DbForum,用户的输入可能就是name和description,因此,创建论坛的方法是

Forum createForum(String name, String description) ,用户拿到Forum对象以后,可以调用一些方法来更改对象,比如:

setModifiedDate(Date modifiedDate),该方法会调用saveToDb()来更新数据表中的纪录。

但是创建复杂的对象这样做是否合适,比如有下面的对象:

class A

{

String name;

Vector v; //v中保存的是一系列b对象

}

class B

{

String name

.....

}

这时候工厂方法是不是就不太适用了?

另外在DbForum中setName,setDescription,setCreationDate等方法都要调用saveToDb来更新数据库,因为用户的修改可能大多是

setName,setDescription,这样做代价也许并不是很大,但是如果一个对象需要频繁更新,比如上面的class A有很多成员变量,都需

要更新,并且更新的代价很高(例如需要保存到文件中),这时候怎么办?我的想法是在class A中设置一个save()方法,对一个对

象做完所有的修改后再调用该方法,把对象进行持久化,但是程序员可能经常忘了调用该方法。有什么好的模式来解决?

一个DbForum对象在用户关心的可能只是name和description,因此通过jsp可以很容易的把DbForum对象显示出来,并且获取用户的输入,进行修改。复杂的对象在浏览器中如何呈现?如何获取用户的输入进行修改?通过一些表单来传递参数可能太复杂,太繁琐了。

a_fan_ti
2003-06-27 12:06
工厂方法主要是为了创建对象而不是保存对象,一系列的B对象的存储不一定要放在工厂内,但是这些对象的创建可以通过工厂。

在A内增加save方法操作B类增加了耦合性,我觉得可以在B中定义save方法来集中处理持久化,程序员忘了调用,呵呵,程序bug。

banq
2003-06-28 20:47
关于“程序员可能经常忘了调用该方法。”,可以使用接口封装方法,把save放在接口中,如果想做得更绝一点,将A类的获得等操作封装在工厂模式中,哈哈,再笨的程序员也应该知道了。

关于表单参数传递,参考Struts的FormAction.

shyguy
2003-06-29 10:24
我认为,jive的持续化层很滥的,别再去学了~~.自己想办法加入个持续化层才是正道.

shyguy
2003-06-29 10:26
呵呵,再补充一点,不管什么持续化层,代码都是很sb的.只是在模块层次上比原来的要清晰点而已.

猜你喜欢
3Go 1 2 3 下一页