分散式DAO
有这样一种需求,业务层有一个类,封装了有关学生的一切操作,例如学生基本信息操作,学生宿舍信息操作
实现具体操作使用的是dao的数据访问接口IStudentDAO,该接口描述了学生相关的所有操作
而在DAO层实现该接口的是两个不同的DAO,studentDAO和dromDAO,连个DAO分别实现了该接口IStudentDAO
我自己管这种模式叫做“分散式DAO”
在studentDAO实现了学生相关的数据操作,而在dromDAO实现了宿舍的相关数据操作,假设在业务层,需要一个功能“为学
生安排宿舍”,该功能要求:
1.为学生安排宿舍以后,该学生的宿舍属性为目标宿舍。
2.每安排一名学生进入宿舍,该宿舍的入住人数+1。(解决这一问题还有一种方法就是将studentsSet.size()插入“现在居住人数”,但是此方法需要对学
生二次查询,为了这样一个小需求进行二次查询显然不划算)
3.为学生选择的宿舍必须和学生性别一致,不能将男生安排到女生宿舍,反之相同
4.为学生选择的宿舍必须是未住满的宿舍,例如drom有8个床位,现有8个人居住,就不能将第九个人安排到该宿舍
这个功能需要对两个实体都进行操作,而两个DAO又实现了同一个接口,需要在两个DAO里面都分别实现所有的描述,这时,业务层怎么知道调用的是学生DAO
的方法还是宿舍DAO的方法?
这时就需要用的java一“得以技”--“upcasting”
在业务层这样使用接口:
private IStudentDAO studentDAO = new StudentDAO();
private IStudentDAO studentDromDAO = new DromDAO();
这时需要对宿舍的操作就使用studentDromDAO,对学生的操作就使用studentDAO,例如:
public getOkDrom(Student student){ //获取合适的宿舍,操作对象:Drom
studentDAO.getOkDrom(Studnet studnet);
}
public studentIntoDrom(Student student,Drom drom){ //安排学生宿舍,操作对象Student,Drom
Student stu = new Student();
Drom dro = new Drom();
dro.setId(drom.getId());
dro.setNowPerson(drom.getNowPerson()-1);
stu.setId(student.getId());
stu.setDrom(dro);
studentDAO.reStudent(stu);//DAO具体实现注意1)
studentDromDAO.reDrom(dro);//DAO具体实现注意1)
}
有这样一种需求,业务层有一个类,封装了有关学生的一切操作,例如学生基本信息操作,学生宿舍信息操作
实现具体操作使用的是dao的数据访问接口IStudentDAO,该接口描述了学生相关的所有操作
而在DAO层实现该接口的是两个不同的DAO,studentDAO和dromDAO,连个DAO分别实现了该接口IStudentDAO
我自己管这种模式叫做“分散式DAO”
在studentDAO实现了学生相关的数据操作,而在dromDAO实现了宿舍的相关数据操作,假设在业务层,需要一个功能“为学
生安排宿舍”,该功能要求:
1.为学生安排宿舍以后,该学生的宿舍属性为目标宿舍。
2.每安排一名学生进入宿舍,该宿舍的入住人数+1。(解决这一问题还有一种方法就是将studentsSet.size()插入“现在居住人数”,但是此方法需要对学
生二次查询,为了这样一个小需求进行二次查询显然不划算)
3.为学生选择的宿舍必须和学生性别一致,不能将男生安排到女生宿舍,反之相同
4.为学生选择的宿舍必须是未住满的宿舍,例如drom有8个床位,现有8个人居住,就不能将第九个人安排到该宿舍
这个功能需要对两个实体都进行操作,而两个DAO又实现了同一个接口,需要在两个DAO里面都分别实现所有的描述,这时,业务层怎么知道调用的是学生DAO
的方法还是宿舍DAO的方法?
这时就需要用的java一“得以技”--“upcasting”
在业务层这样使用接口:
private IStudentDAO studentDAO = new StudentDAO();
private IStudentDAO studentDromDAO = new DromDAO();
这时需要对宿舍的操作就使用studentDromDAO,对学生的操作就使用studentDAO,例如:
public getOkDrom(Student student){ //获取合适的宿舍,操作对象:Drom
studentDAO.getOkDrom(Studnet studnet);
}
public studentIntoDrom(Student student,Drom drom){ //安排学生宿舍,操作对象Student,Drom
Student stu = new Student();
Drom dro = new Drom();
dro.setId(drom.getId());
dro.setNowPerson(drom.getNowPerson()-1);
stu.setId(student.getId());
stu.setDrom(dro);
studentDAO.reStudent(stu);//DAO具体实现注意1)
studentDromDAO.reDrom(dro);//DAO具体实现注意1)
}