jive源代码问题!狂送分!!
研究JIVE也又好长一段时间了,问题就是出在JIVE里的jsp设计,比如创建用户,论坛,发贴什么的好象都与database无关,但实际上在它的database里全部都是与数据库有关的类(DB*.class),但在jsp里怎么好象没有用到DBUser或DBUserManager之类的class呢?而在jsp源代码只是把interface给定义,设置,那在jsp里怎么与数据库打交道呢?又怎么把页面提交的数据如用户名称,密码,email等信息插到数据库呢?我百思不得其解,甚是苦恼,特请指点!谢谢!
如:createUser.jsp片断
ProfileManager profileManager = null;
if( !errors && doCreate ) {
// get a profile manager to edit user properties
profileManager = forumFactory.getProfileManager();
try {
User newUser = profileManager.createUser(username,password,email); //jive是怎么把信息插到数据库里的??
newUser.setName( name ); //newUser是接口啊!不能赋值吧?为什么要这样呢?
newUser.setEmailVisible( emailVisible );
newUser.setNameVisible( nameVisible );
success = true;
}
catch( UserAlreadyExistsException uaee ) {
errorUserAlreadyExists = true;
errorUsername = true;
errors = true;
}
catch( UnauthorizedException ue ) {
errorNoPermissionToCreate = true;
errors = true;
}
}
问题点数:100、回复次数:12Top
1 楼aiaiok(小东子~我不入地欲,谁入地域?)回复于 2002-05-21 16:19:35 得分 0
学习!学习!Top
2 楼nielinjie(学当活雷锋ing)回复于 2002-05-21 16:25:23 得分 0
forumFactory.getProfileManager();
profileManager.createUser(username,password,email);
返回的是类,不是接口。
另外接口为什么不能赋值?Top
3 楼wsnds()回复于 2002-05-21 16:44:17 得分 0
nielinjie(分低因为我一般不来),你好,
1:forumFactory.getProfileManager();
2:profileManager.createUser(username,password,email);
3:返回的是类,不是接口。
4:另外接口为什么不能赋值?
上面是你所说的地点,第一点返回的是ProfileManager接口,第二点返回的是User接口,第三点肯定就不成立了,第四点接口是能赋值,但我不理解在jive中给User.setName(),User.setEmail等有什么作用,请问是不是User.setName()完了以后再User.getName()取得吗?但我发现是取不了的,面向接口编程??请指点,谢谢!
Top
4 楼slighting(会飞的蛤蟆)回复于 2002-05-21 17:18:30 得分 0
开发大型系统有个要求那就是:面向接口编程.接口是的方法是可以传值的,系统初始化的时候,就用FACTORY和抽象FACTORY模式,实例化了DbUser.所以,你在调用User.serName方法的时候,实际上是通过动态绑定调了DbUser.setName方法.
你可以参考一些设计模式的文章,这里好像有过一篇专么介绍JIVE设计模式的:
http://www-900.ibm.com/developerWorks/cn/index.shtmlTop
5 楼wsnds()回复于 2002-05-21 17:30:01 得分 0
那DbUser.setName("测试")了以后,DbUser怎么样才能得到这个值呢?谢谢!!Top
6 楼wsnds()回复于 2002-05-21 17:39:04 得分 0
同上,那User.setName( "测试 ")了以后,DbUser怎么样才能得到这个值呢?谢谢!! 我的意思是说,在User里setName()与DbUser有什么直接关系吗?怎么样动态绑定调用了DbUser.setName方法呢?Top
7 楼banq(板桥里人)回复于 2002-05-21 18:53:51 得分 0
如何动态梆定,就是用接口啊.
User是个interface, Dbuser是继承User的
你可能对接口不是很熟悉,Jive是用了很多GOF的设计模式,
你理解了设计模式就了解Jive的体系.
关于设计模式和Jive见我的主页
http://www.jdon.comTop
8 楼wsnds()回复于 2002-05-22 08:52:30 得分 0
banq(www.jdon.com),你好!很感谢你的回答,正如你说的,我虽然java很长时间了,但是对接口还真的很不熟悉,能否真对上例做个小例子或详细说明一下呢?比如说User.setName("测试"),然后我想知道有没有设置好值了,System.out.println(?????),我就卡在这里出不去了,怎么才能得到它设置的那个值呢?真是百思不得其解,这是一件很痛苦的事情,希望你能帮我解答一下!谢谢了!Top
9 楼hongliqiu(在火中)回复于 2002-05-22 09:15:06 得分 0
up
Top
10 楼cyberworm(虫子)回复于 2002-05-22 09:38:24 得分 0
如果实现了newUser接口的类提供了回调Name的方法比如getName() :)
你就能得到你set进去的值了。像楼上说得,去看看patters的书吧。Top
11 楼yakuu(BraveT)回复于 2002-05-22 09:47:07 得分 80
我用jive很长时间了。现在开发的论坛内核也用的是jive。
从2.5版开始,jive开始接近一流forum水平,它的整个系统框架和
许多代码设计都是非常有研究价值的。
上面已经说了很多,在我看来,jive在操作数据库过程中,它创建的
对象虽然都是接口类,但是,在实例化的时候,使用的是实现类。也
就是DB*.class,比如上面的User.class,在定义对象后,接口类和
实现类同时进行实例化。然而,所有的操作数据库,都是在DB*.class
这些类的saveToDb(),loadFromDb()等方法中实现。
呵呵,这么大个东东,要说清楚真是累。欢迎和我交流:
taochina@msn.com
以上只是我的一点使用心得,请指正。Top
12 楼pengji(彭乃超)回复于 2002-05-22 10:00:11 得分 20
public class B
{
public static void main(String[] args)
{
a obja=A1.geta();
obja.p("interface test");
}
}
////////////
public interface a
{
public void p(String str);
}////////////////
public class A1 implements a
{
private static A1 objA1;
public void p(String str)
{
System.out.println(str);
}
public static a geta()
{
objA1=new A1();
return objA1;
}
}
存为三个文件,然后编译!java B运行!Top
13 楼wsnds()回复于 2002-05-22 10:23:00 得分 0
yakuu(享受孤独),你好,
<-上面已经说了很多,在我看来,jive在操作数据库过程中,它创建的
对象虽然都是接口类,但是,在实例化的时候,使用的是实现类。也
就是DB*.class,比如上面的User.class,在定义对象后,接口类和
实现类同时进行实例化。然而,所有的操作数据库,都是在DB*.class
这些类的saveToDb(),loadFromDb()等方法中实现。
->
上面所说的接口类和实现类同时进行实例化在哪里体现呢?我看jive源代码的时候好想没有啊!就是直接从factory里得到一个接口,然后对接口进行设置,而具体类(DB*.class)根本就没有初始化啊!请指点!
Top




