J2EE设计模式之用实体组件进行数据存取
2,会话组件最好只通过普通JAVA数据存取接口的一个持久性门面来访问实体组件。虽然实体组件衽了一种特殊的数据处理方法,但标准
3,实体组件通常是一 个薄层,用于具体化一个不是基于对象的数据存储器。如果使用一个像ODBMS之类的面对对象的数据存储器,这个薄层不是必需的,因为可以使用助手类从会话组件中访问这种数据存储器
4,关于实体组件的争论有两点:一)实体组件的粒度,二)实体组件是否可以实现业务逻辑。
5,一个粗实体可能会建模一条逻辑记录,而这条记录会分布于多个表中;而一个精细粒度可能会映射到单个表中;在EJB2.0 CMP中通常认为精细粒度会更加方便,虽然粗粒度的建模更利于面向对象的设计,但有一个结论就是:
在EJB2.0中,最好是通过使用CMP把实体组件用于相当精细的对象。
6,无论任何理由都不能破坏以下约定:
在实体组件中只实现持久性逻辑,不要实现业务逻辑!
7,BMP的“N+1”问题,对于BMP的find方法,它在EJB中的实现需要返回主键集合,在幕后BMP做了什么了?
SELECT PK,NAME, FROM USERS WHERE PK=
...
SELECT PK,NAME, FROM USERS WHERE PK=
SELECT PK,NAME, FROM USERS WHERE PK IN
结论:不要实体组件中使用BMP,而要从无状态会话组件中使用持久性。和从一个DAO层中执行数据存取相比,使用BMP不会增加什么价值,只会增加复杂性。
9,应该使用DAO来分离数据数据存取与业务逻辑。当然DAO中是可以用无状态会话BEAN来实现的。



