Java EE Architecture - 在使用像JPA 2这样的ORM时,DAO是否仍然被推荐?
如果我使用的是像 JPA2 这样的 ORM - 其中我的实体映射到我的数据库,我是否仍应使用 DAO?这似乎需要更多的开销。
例如,我需要维护三个额外的包:
-
一个指定我的域对象(它几乎映射我的实体对象):
public class Employee { private String firstName; private String lastName; ... // Getters and setters }
-
一个包含指定我的DAO方法的接口
public interface EmployeeDAO { public void addEmployee(Employee employee); public Employee getEmployeeById(long id); ... }
-
一个包含会话bean,用于实现我的DAO的
public EmployeeJpaDAO implements EmployeeDAO { interface method implementations here .... private method that transform my Employee entity into my Employee domain object }
现在,每次我需要执行新的CRUD操作时,都需要添加很多额外的行李。
然而,我看到拥有DAO的好处是:
您可以使用 DAO 的内存实现来对服务层进行单元测试。这意味着您无需访问数据库来测试业务逻辑,并且可以放心,您的对象将始终包含相同的属性值。
它将业务逻辑与数据库访问逻辑分开
不涉及实现 DAO 的选项是只在服务层中使用实体对象和实体管理器:
@Stateless
public class EmployeeEjb {
@PersistenceContext(unitName = "employee")
private EntityManager manager;
public Employee getEmployeeById(long id) {
return manager.createNamedQuery(Employee.GetEmployeeById).getResultList();
}
...
}
这里没有中间地带吗?有没有人遇到过一个架构或实现一个架构,它满足了我上面提到的DAO层的一些好处(最重要的是业务逻辑的单元可测试性),但不涉及实现DAO层所涉及的所有开销?
感谢您的任何建议和/或建议!我真的很好奇有些人对此有什么看法。