老生常谈,关于Service和DAO的解耦和
各位前辈好,小弟心中存有疑问良久,望能得到各位前辈的经验之谈。
仍旧是关于Service和DAO之间的耦合性问题。
项目中80%以上的数据库操作是query操作,这意味着我不管使用JDBC或是Hibernate都会存在着要写大量的复杂的SQL或HQL语句进行query的工作。问题就在,到底这些SQL或HQL我应该写在哪里?
一,在DAO中,根据项目需求定义大量用于query的method。这样简化了Service的操作。
但是困惑是,如果这些复杂查询的业务已经被DAO实现了,要Service干吗用?
或者说,DAO作为一个与持久层打交道的层面,不应该与业务逻辑层产生任何耦合性依赖。
但如果将这些查询语句写在DAO中,如果一旦业务改变,DAO中岂非也得相应变化?
二,在DAO中使用通用方法执行查询,而查询使用的SQL或HQL作为方法的参数被调用者(Service)传进来。
这样意味着SQL必须定义在Service里。
如果可以在Service层里写SQL的话,那还需要DAO吗?
或者说,这个Service,还能被称之为Service吗?
三,将SQL或HQL写在配置文件中,
在Service里通过某个诸如SQLUtils之类的类去读取配置文件得到SQL
传递给DAO用于查询。
但同样问题多多,例如在开发时,配置文件是在初始化加载的
意味着我每次修改SQL都得加载项目。
不知道我的问题是否描述清楚,想知道各位前辈的做法
[该贴被admin于2009-03-24 13:13修改过]