一个困扰了很久的问题 希望得到指点

07-10-30 frogoo
public class TestOne {

private TestBean bean;

private BeanManager manager;

public TestOne(TestBean bean){

this.bean=bean;

}

public String queryData(){

manager.doSome(bean);

}

}

___________________________________________

public class TestTwo{

private BeanManager manager;

public String queryData(Test bean){

manager.doSome(bean);

}

}

___________________________________________

这两种编写代码的方式经常可以见到,特别是在写服务类时一个DAO对一个VO的操作,那么这两种写法有什么区别,哪种更适合,还是各自有不同的适用场合?

[该贴被frogoo于2007-10-30 17:41修改过]

[该贴被frogoo于2007-10-30 17:43修改过]

    

1
banq
2007-10-31 11:35
这本质上要掌握对象的生命周期。

在Java编程中,我们制造使用一个对象时,一定要心里对其生命周期有一个掌握,这是传统过程语言所没有的习惯。

TestBean如果作为TestOne的字段属性,那么TestBean生命周期就和TestOne一致。采取第二种方式就没有这个考量。

还有进一步:如果两者生命周期是一致的,也就是说两者形成依赖度更高的关联,那么耦合性就更强(除非我们使用依赖注射模式),而设计目标是松耦合。

frogoo
2007-10-31 16:29
public class TestOne {

private TestBean bean;

private BeanManager manager;

public TestOne(TestBean bean){

this.bean=bean;

}

public String queryData(){

manager.doSome(bean);

}

public void saveData(){

manager.doSava(bean);

}

}

___________________________________________

public class TestTwo{

private BeanManager manager;

public String queryData(TestBean bean){

manager.doSome(bean);

}

public void doOthers(){

System.out.println("other");

}

}

您所说的“TestBean生命周期和TestOne一致”的意思是什么? 是指TestBean贯穿于TestOne的所有方法,TestOne的操作都要依赖于TestBean吗?

是不是 像TestTwo一样 当TestBean只是TestTwo职能的一部分的时候,使用第二种方式

knico
2007-10-31 22:57
第一种方式,testbean在testone成为实例时候已经成为实例,除非写setter来改变,否则直到testone销毁都存在

而第二方式中,testbean和testtwo没有实例上的关系,仅作为参数参与运算

banq
2007-11-01 11:09
>TestBean生命周期和TestOne一致

就是生死与共啦,同生同死。

猜你喜欢
2Go 1 2 下一页