分散式DAO

来源:互联网 发布:淘宝网t恤 编辑:程序博客网 时间:2024/06/02 22:21
分散式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)
        }
 
原创粉丝点击