一个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之后只要写一个查询方法就可以了。
------解决方案--------------------