不知是否属于DAO模式?

yingtju 2005-07-19 04:59:52
刚接触hibernate,我想把一个ejb的例子用hibernate重写一遍,构思如下:
对原CMP实体bean定义一个持久化类(Item,Category)
将原CMP实体bean主接口的finder函数和组建接口的业务逻辑函数用DAO封装(ItemDAO,CategoryDAO)
定义Manager类(我想用Session Bean),对一个或多个DAO操作。(ShopManager)

我所理解的DAO模式就是这样,不知是否有所偏差?
我在网上找了些相关文章,说这种实现是贫血型domain object,不过我觉得用这种方法
写出的代码很清晰阿,要比将业务逻辑写入持久化类好多了
请高手指点
...全文
705 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ses127127 2005-07-20
  • 打赏
  • 举报
回复
一般所谓的DAO类是封装所有对表操作的函数,一般是一个表一个DAO
iceandfire 2005-07-19
  • 打赏
  • 举报
回复
to yingtju(蚂蚁):

怪我没说清楚,我写的代码仅仅是一个参考例子.TestSession是个SessionBean而已.业务代理方法我只是举个例子,你没必要去抠代码真正的业务逻辑.当然了,public long addForum()也可以是void型,这得看你的会话bean中的方法原型是如何的了
yingtju 2005-07-19
  • 打赏
  • 举报
回复
to iceandfire(【咖啡沫】) :
对你的代码有些疑问:
定义私有变量sb应该是FactoryServices类把,TestSession是什么意思啊
还有:
// 业务代理方法
public long addForum(){
... ...
return getEJB().sb.addForum(catagory, forumTitle, summary);
//应该是getEJB().addForum(catagory, forumTitle, summary)吧?
... ...
}
iceandfire 2005-07-19
  • 打赏
  • 举报
回复
说的没错,这样设计的一个好处是可以减少网络调用的开销.在EJB设计模式中,DAO是和会话外观经常相互结合的一种设计模式.mofeir所说的其实就是这样的一种模式.

Delegate我想应该指的是业务代理吧.这种代理模式是与会话bean原型相同的普通Java类.通过封装用于发现、代理及恢复对会话及消息外观EJB层的调用代码,隐藏了EJB API的复杂性。

例子:
下面的例子用到了EJB Home工厂,利用EJB HOME工厂来快速查找EJB Home对象

public class ForumServicesDelegate implements Serializable
{
private transient TestSession sb;
private Handle remoteHandle;

public ForumServicesDelegate() throws DelegateException
{
try
{
ForumServicesHome home = (ForumServicesHome)
EJBHomeFactory.getFactory().lookUpHome(ForumServicesHome.class);
this.sb = home.create();

this.remoteHandle = sb.getHandle();
}
catch (Exception e)
{
throw new DelegateException();
}
}

// 业务代理方法
public long addForum(long catagoryPK, String forumTitle, String summary)
throws NoSuchCatagoryException, DelegateException
{
try
{
return getEJB().sb.addForum(catagory, forumTitle, summary);
}
catch (CreateException e)
{
throw new DelegateException();
}
catch (RemoteException e)
{
throw new DelegateException();
}
}

private ForumServices getEJB() throws DelegateException
{
try
{
if (sb == null)
{
sb = (ForumServices) ProtableRemoteObject
.narrow(remoteHandle.getEJBObject(), ForumServices.class);
}
}
catch (ClassCastException e)
{
throw new DelegateException();
}
catch (RemoteException e)
{
throw new DelegateException();
}

return sb;
}
}
fengyun1314 2005-07-19
  • 打赏
  • 举报
回复
所说的DAO就是把功能集成为通用的类,让这个类去跟数据库打交道。
yingtju 2005-07-19
  • 打赏
  • 举报
回复
后三层和我说的是一个意思吧
第二个个Delegate是干什么的阿?

还有持久化类能当值对象用马?
比如实例化一个对象放在request域,
然后在jsp页面用<bean:write name="" property="" />写他的属性
mofeir 2005-07-19
  • 打赏
  • 举报
回复
ok,告诉你一个例子
Structs-->>Delegate-->>SessionBean-->>DAO(hibernate)-->>Database

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧