首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

DAO与SERVICE层的迷惑

2012-10-29 
DAO与SERVICE层的疑惑一直以来都是开发EJB的项目,对于SSH的架构仅仅只是处于了解而没实际开发过,最近正在

DAO与SERVICE层的疑惑
    一直以来都是开发EJB的项目,对于SSH的架构仅仅只是处于了解而没实际开发过,最近正在将公司的一个EJB项目重构成一个SSH的架构,在实际开发过程中遇到了一些问题,其中一个就是持久层和业务层之间数据传输的问题。

    在原来EJB项目中,都是使用实体BEAN进行数据持久的,而现在换成了DAO负责持久逻辑,一开始的时候业务层和持久层之间数据通信都是直接使用POJO进行,不再需要像以前使用EJB那样将DTO的数据set到实体BEAN上,减少了很多不必要的代码,刚开始的时候觉得挺爽,可是后来发现一个问题,那就是在service层调用DAO持久一个POJO后,POJO将变成PO,DAO持久方法将会返回一个对象,而我目前的做法就是直接返回一个PO到业务层,可是现在发现这种做法存在不恰当的地方,那就是PO在业务层的话,结果就将业务层与持久层相耦合,而DAO层的作用也因此而消弱,但是如果我不是直接返回PO的话,那我又要构造一个VO返回给业务层,那这种做法不是又回到原来EJB的方式上?而且这样我也无法在业务层上获得HIBERNATE很多优化性能功能,例如lazy load等,看了很多相关的帖子,但是好像都没有我想要的答案,请教一下我该如何解决这个问题?
As for "暴露了领域对象,很容易造成混乱",I think "domain objects" should be transparent and shared by all the layers. In contrast,the POJOs that implement the business logic should be confined to its boundary,by adding interface.

JPA is not designed to replace DAO, they are different concept. Put it in another way, using JPA will make the DAO layer seem to be redundant if it is a small system.

As for "暴露了领域对象,很容易造成混乱",I think "domain objects" should be transparent and shared by all the layers. In contrast,the POJOs that implement the business logic should be confined to its boundary,by adding interface.

JPA is not designed to replace DAO, they are different concept. Put it in another way, using JPA will make the DAO layer seem to be redundant if it is a small system.


那你所谓的another type of POJOS 和 only has data 的POJO是什么关系呢?包含、继承还是一个包含业务逻辑的service实现?我目前的实现就是POJO包含数据以及少部分与持久无关的逻辑即贫血模型,再做一个service做具体的业务逻辑。

这种做法和以前EJB的做法确实没什么太大的区别,说实话,我目前也只适应这种方式,真要叫我完全OO,然后全部充血模型,我头都会大,我觉得那样就太过教条了,而且很容易出现问题,要求太高了,反而我觉得这种facade的方式我更喜欢,也更适合目前的项目。
这个方法不错! 27 楼 zhendeshiming@ 2008-10-31   The last packet successfully received from the server was55089 milliseconds ago.The last packet sent successfully to the server was 55089 milliseconds ago, which  is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem,
谁来告诉我这个是怎么回事?如何解决啊!!!!!!!!!!

热点排行