Если я использую ORM, например JPA2 - где у меня есть объекты, которые сопоставлены с моей базой данных, должен ли я использовать DAO? Это кажется намного более накладными расходами.
Например, мне нужно будет поддерживать три дополнительных пакета:
-
Тот, который определяет объекты моего домена (которые в значительной степени отображают мои объекты Entity):
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); ... }
-
Тот, который содержит сеанс beans, который реализует мои 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, заключается в том, чтобы просто использовать объекты объекта и EntityManager в уровне обслуживания:
@Stateless
public class EmployeeEjb {
@PersistenceContext(unitName = "employee")
private EntityManager manager;
public Employee getEmployeeById(long id) {
return manager.createNamedQuery(Employee.GetEmployeeById).getResultList();
}
...
}
Нет ли здесь среднего места? Кто-нибудь сталкивался с архитектурой или реализовал архитектуру, которая удовлетворяет некоторым преимуществам уровня DAO (что наиболее важно для тестируемой бизнес-логики), о котором я упоминал выше, но не включает в себя все накладные расходы, связанные с внедрением уровня DAO?
Спасибо за любые рекомендации и/или предложения! Мне действительно интересно узнать, что некоторые люди придумали в отношении этого.