关于J2ee标准SB+CMP以及SB+DAO的疑惑

04-08-28 ZouLinZhi
//对不起,在开源版块发了贴子,发错了,应该发在这里,请斑竹删了那篇

因为平时做的都是基于开源的hibernate,struts的Web App

所以,用jsp->Struts(MVC)->bo(po加上逻辑方法)->DAO->po->DB

很舒服的设计开发.

可是最近小弟受了点刺激,去sun面试,被问知EJB开发,无语.所以最近研究使用EJB的开发模式.

如果在SessionBean的方法中调用pojo,pojo加上逻辑方法,这些方法中调用DAO对象,DAO对象方法内再调用操作CMP.这样可以吗?

好象通用的方法是SessionBean直接在它方法内部操作CMP.不过,我个人讨厌这样,因为这样一个逻辑对象就失去了它自己的逻辑操作.(下面例子)

逻辑对象:Student类

public class Student{

private String name=null;

String getName();

void setName(String name);

}

如果不只是当成传值对象,那么可以这样.

public class StudentBO extend Student{

void invalideName();

}

以前应用中(hibernate),其中invalideName()可以调用StudentDAO的操作.

如:

void invalideName(){

this.setName(null);

StudentDAO.save(this);

}

public class StudentDAO{

//do something hibernate do for us

}

但是现在(EJB),Student只能当成一个传值对象,那么StudentBo的相关操作应该写在那里??难道做一个stateless SB? StudentSB,里面方法都是invalideName(Student)???

我个人认为,stateless sb只是用来封装如StudentBO这种对象的逻辑操作的.一个方法是一个事务.不应该是来封装Student.invalideName()这种和对象紧密相关的逻辑操作的.

如:

StudentEJB{

void leaveSchool(Student s,Teacher t){//退学

s.knowThat();

t.invalidName();

}

哪个大哥来给小弟说说j2ee(EJB)开发中普通开发怎么来分层实现的,特别是逻辑层,如果不用DAO,只有SB\CMP,怎么划分逻辑??最好简单写写!拜托!小弟实在不解.......

    

banq
2004-08-31 16:25
BO一般指带事务机制的Object,那么在EJB中是SLSB实际就是一个BO。

>如果在SessionBean的方法中调用pojo,pojo加上逻辑方法,这些方法中调用DAO对象,DAO对象方法内再调用操作CMP.这样可以吗?

当然是可以,但是会产生粗粒度事务,直接SLSB调用CMP。

可以使用SLSB+DAO+JDBC/Hibernate调用,不涉及事务是可以的。

当然最新技术,采取SLSB+DAO+Spring事务+JDBC/Hibernate也是可以的。

DTO只有在EJB中才存在的模式,DTO是VO的现在名词,意思是值对象,用于在分布式环境实现一次性打包传送参数或数值。

在纯Web中,因为不涉及多台服务器分布计算,所以一般只有BO+DAO,当然两者都是POJO,POJO是普通旧的JavaBean对象,意思指那些不依赖继承接口或其他类,独立的JavaBeans。

wzbwambition
2004-09-03 09:30
搞这么多名词有什么用啊,直接说不得了,class就是class,object就是objec.搞的莫名其妙的新名词这么多,有碍交流,名字都记不过来,还交流什么.

banq
2004-09-03 12:12
你的疑问非常有意思,这么多名词反应Java世界的复杂,每个流派根据自己定义来发明词语。

JavaAndDotnet
2004-09-06 09:21
不必要的复杂会导致java发展很慢

猜你喜欢
2Go 1 2 下一页