JiveJdon Community Forums
在线186人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » 项目工程开发经验谈
???en_US.forumThreadPrev.name??? 上一主题
google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi 天极网摘
???en_US.forumThreadNext.name??? 下一主题
Go 共有 3 回复 / 1
 发表新帖子   回复该主题贴
leyen

悄悄话
发表文章: 12
注册时间: 2006年09月07日 16:49
一个小型网站中的层职责设计,请问是否合理 2006年10月25日 23:55 到本帖网址 加入本帖到收藏夹 回复该主题
标签                    
这个网站的主要功能是新闻发布,投票管理,一些政策信息的发布,新闻版块的管理.
项目使用Struts+hibernate3.0开发

项目中分层是这样的
Entity(相当于DOMAIN)
DAO层
Service层.
还有 web层.web层主要是Struts的action,相当于一个控制器.

在DAO层中我只写了一个包含了CRUD方法的接口暂时叫做(Service)和它的一个实现类,接口中的方法如下
interface Service{
saveOrupdate(Entity e);//Entity 是每个实体类必须实现的接口
delete(Class c,Serializable id);
List query(String hql,Map conditions);//使用Hibernate HQL查询

}

针对于具体的业务要求,我在Service层中写具体的业务方法,比如:
NewsService{
Service service=new ServiceImpl();
public News readNewsById(Serializable newsId){
String hql="from news n where n.id=:id";
Map conditions=new HashMap();
conditions.put("id",conditions);
List newsList=service.query(hql,conditions);
return newsList.get(0);
}
public void deleteNewsById(Serializable id){
service.delete(News.class,id);

}
......//其余业务方法略
}

在NewsService中我没有使用任何事物机制.具体的事物是通过AOP方式实现的,这个事物处理方法是通过CGLIB中的enhancer来包装这个NewsService,然后写个方法拦截器,在NewsService中每个方法执行之前和之后开启事物和关闭事物以及捕获异常回滚等.
这个包装NewsService的类叫TransactionProxy,在Struts的action中通过如下方式使用带有事物机制的NewsService
DeleteNewsAction extends Action {
public ActionForward execute(....){
NewsService newsService=
(NewsService)TransactionProxy(NewsService.class);
.....
}
}


以上是我的代码,不知道大家对这样的项目结构有什么看法;本人期待大家的意见,谢谢




banq

悄悄话
发表文章: 9613
注册时间: 2002年08月03日 17:08
Re: 一个小型网站中的层职责设计,请问是否合理 2006年10月26日 14:16 到本帖网址 加入本帖到收藏夹 回复该主题
基本结构清楚。

关于事务采取AOP方式是可行的,如果从性能角度来说,不如直接在代码中显式调用,权限检查等是需要AOP,因为权限系统设计上需要和业务系统分离,而事务支持作为一个API,我们介入有关事务编程工作很少(相反,我们介入权限方面的编程要很多)。

个人意见,纯参考。
leyen

悄悄话
发表文章: 12
注册时间: 2006年09月07日 16:49
Re: 一个小型网站中的层职责设计,请问是否合理 2006年10月26日 16:24 到本帖网址 加入本帖到收藏夹 回复该主题
谢谢板桥大哥的回复,我还有一个问题想问问,就是我把DAO代码做的尽量通用,避免写烦琐而功能类似的代码,这种方式对于项目的扩展来说有没有影响呢?我做过的项目不多,而且没有参与过架构设计,没有什么预见性,请您以及有设计经验的大侠们指点一下,先谢谢了
banq

悄悄话
发表文章: 9613
注册时间: 2002年08月03日 17:08
Re: 一个小型网站中的层职责设计,请问是否合理 2006年10月27日 12:31 到本帖网址 加入本帖到收藏夹 回复该主题
>把DAO代码做的尽量通用,避免写烦琐而功能类似的代码
使用Hibernate,所有Domain Model只需要用一个包含save update delete get(CRUD)的类就可以了,Spring+Hibernate中提供的HibernateTemplate必须根据不同的Model做不同的DAO实现,而如果我们统一所有Model为一个Entity(根据Evans DDDD),那么只需要一个DAO类就可以,不是统一而通用吗?

当然,剩余的功夫就是你的Domain Model聚合设计了。也就是Evans DDD的功夫了,我已经做出一个这样系统,见该文源码:
http://www.jdon.com/artichect/javaee.html
标签                    
共有 3 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG:
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 插入附件 插入word文档 Txt等文件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl-V可取出;提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区 推荐Chrome快速浏览本站
OpenSource JIVEJDON v3.5 Powered by JdonFramework Code © 2002-09 jdon.com

anti spam