日期:2014-05-17  浏览次数:20732 次

一个ssh项目的疑问
看到一个ssh项目,是采用抽象的编程模式,而不是借口的编程,谁能给讲讲这是什么原理,有什么好处和不好之处:
DAO层
Java code
inteferface  DAO(){
增删改查的操做方法;
}

DAO的实现层实现hibernateDAOsupport,
然后定义了一个抽象类,
Java code
abstract class BaseDAO(){
里面注入接口DAO..., 就没有其他代码了
}

然后其他各个DAO的实现去继承这个BaseDAO(),比如
Java code
public class UserDAO extends BaseDAO(){
...}

Service层有一个BaseService
Java code
public class BaseService extends BaseDAO(){
}


 然后用户的各个Service去继承这个BaseService。


请问这样的实现方式是个什么原理,有什么好处与坏处?

------解决方案--------------------
做了轻度封装
如 BaseDAO() 实现增删改查, 那继承它的其它DAO实现类,就可以直接使用它的增删改查
即将所有 增删改查的基本操作全部放在一个BaseDAO里。

如果不用继承,那你有可能每个DAO实现类都写增删改查,那样重复代码就会有很多了~
------解决方案--------------------
1、抽象类
动物 - 猴子,大鸟,兔子。
就用abstract class Animal,其它动物继承它。 可以使用抽象类中的属性。 一般是对对象的继承。

2、接口
飞, 爬树。
interface Fly, 或 interface Climb, 哪个动物会飞,就实现这个接口,一般是对 动作的实现。

个人见解:两种实现的差不多-- 区别在以上所说2点。 欢迎拍砖。
------解决方案--------------------
BaseDao可能会有一些公共的方法,这个方法的具体实现是统一的,所以要用抽象类。比如BaseDao做一个存储操作
BaseDao
public void save(){
session.save(getEntity());
}
abstact Object getEntity();

大概就是上面的意思
service也是类似,可能有些操作是因为具体业务而增加的特殊操作,就写在service里,然后其他具体的service再去继承这个service

------解决方案--------------------
抽象类的好处是可以继承父类的方法,节省代码。
比如你的UserOneDAO和UserTwoDAO,增删改的方法都一样,只有查询不同,一个通过姓名,一个通过ID。
那就可以写一个BaseDAO抽象类实现增删改方法,然后写一个查询的抽象方法,子类继承BaseDAO之后只要写一个查询方法就可以了。
------解决方案--------------------
探讨
哎,总有喜欢追求原理的人啊。

当我这么写的时候,我从不想是什么原理,我的理由就是,懒得把相同的东西复制粘贴好多次,改起来麻烦。