这个问题与Java DAO Pattern的核心理解有关。请查看一个简单的java dao pattern example来理解我的问题。
在下面的第2行,学生对象已经用新名称进行了更改,如果客户端和后端都在同一个JVM下运行,那么第三行的重点是什么?
在我对DAO模式的简单理解中,客户端必须仅使用服务来改变数据,例如下面的studentDao,并且客户端不应该直接更改值对象(pojo)。但是当客户端和后端服务在同一个JVM下运行,并且客户端获得具有普通setter的POJO时,为什么客户端需要调用该服务?
是否有任何最佳实践来实现DAO模式,客户端可以而且必须仅使用dao-services来使用/更改数据?一个很好的例子就是很好看。
//update student
1. Student student =studentDao.getAllStudents().get(0);
2. student.setName("Michael");
3. studentDao.updateStudent(student);
答案 0 :(得分:0)
嗯,它在同一个JVM上意味着什么。如果您的DAO使用DB,那么当您更改POJO时,对象不会在DB中发生更改。类似地,当其他线程将加载相同的实体时,将根据DB内容创建新的POJO(除非您的DAO进行一些特殊的缓存)=>没问题。
所以现在让我们假设您构建了某种内存中的DAO。如果没有正确实施,在这种情况下,改变POJO可能会影响"你已经指出的其他客户。然而,这并不是DAO的良好实施 - 所以你必须注意客户可以访问的POJO不会影响DAO" state"。最简单的方法是返回defensive copies所有返回值,但也返回所有输入(插入,更新等)。