在分层设计的时候,一般都不会省略掉DAO这层。泛型在JAVA1.5开始出现,它会使DAO的实现变得更简更美。
比如有实体对象教师(Teacher)与学生(Student),我们可以抽象出教师与学生的共性,他们都有编号、姓名、性别,就可以写个Person基类。
public
class
Person
...
{
private Long id;
private String name;
private String gender;
//下面是setter和getter方法,略去
}
private Long id;
private String name;
private String gender;
//下面是setter和getter方法,略去
}
教师类和学生类就可以扩展Person类,添加如工资或成绩等属性。那么DAO类是不是也用到继承呢?因为DAO类一般是查找增加删除更新这些动作,具体类有各自的业务逻辑操作,确实应该抽象出来。
//
T是实体类型,K为主键类型,比如 Long 或 Integer
public interface IDao < T extends Person, K > ... {
public void save(T obj);
public void update(T obj);
public void delete(T obj);
public T load(K id);
}
public interface IDao < T extends Person, K > ... {
public void save(T obj);
public void update(T obj);
public void delete(T obj);
public T load(K id);
}
比如操作学生类的DAO类(StudentDao),示例代码如下:
public
class
StudentDao
implements
IDao
<
Student, Long
>
...
{
public void save(Student student) ...{
//这里是实现的具体操作
}
public void update(Student student) ...{
//这里是实现的具体操作
}
public void delete(Student student) ...{
//这里是实现的具体操作
}
public Student load(Long id) ...{
//这里是实现的具体操作
}
//其它业务方法
public int getStudentCount() ...{
//......
}
//......
}
public void save(Student student) ...{
//这里是实现的具体操作
}
public void update(Student student) ...{
//这里是实现的具体操作
}
public void delete(Student student) ...{
//这里是实现的具体操作
}
public Student load(Long id) ...{
//这里是实现的具体操作
}
//其它业务方法
public int getStudentCount() ...{
//......
}
//......
}
这样是不是很简很美呀?如果说不是,那看看没有使用泛型时是多么糟糕啊。由于真的很糟糕,我都不想写出来了。总之是用Object类型,然后强制转换成其它类型。
虽然JAVA的泛型来得比较迟,但是用处还是不错的。