Si j'utilise un ORM comme JPA2 - où j'ai mes entités qui sont mappés à ma base de données, dois-je continuer à l'aide d'un DAO? Il semble que beaucoup plus de frais généraux.
Par exemple, j'aurais besoin de maintenir trois paquets supplémentaires:
-
Celui qui spécifie mes objets du domaine (qui assez bien la carte de mes objets de l'Entité):
public class Employee { private String firstName; private String lastName; ... // Getters and setters }
-
Celui qui contient les interfaces que de spécifier mes méthodes DAO
public interface EmployeeDAO { public void addEmployee(Employee employee); public Employee getEmployeeById(long id); ... }
-
Celui qui contient des beans de session qui mettent en œuvre des mon de DAO
public EmployeeJpaDAO implements EmployeeDAO { interface method implementations here .... private method that transform my Employee entity into my Employee domain object }
Maintenant que beaucoup de bagages supplémentaire à ajouter à chaque fois que j'ai besoin d'effectuer une nouvelle opération CRUD.
Cependant, les avantages que je vois à avoir un DAO est:
Vous pouvez avoir une mémoire mise en œuvre de la DAO pour les tests unitaires votre couche de service. Cela signifie que vous n'avez pas besoin d'accéder à la base de données pour tester la logique métier, et vous pouvez être assuré que vos objets contiennent toujours les mêmes valeurs pour les propriétés
Il sépare la logique métier de base de données logique d'accès aux
L'option qui n'implique pas la mise en œuvre d'un DAO est simplement d'utiliser des objets de l'entité et l'EntityManager dans la couche de service:
@Stateless
public class EmployeeEjb {
@PersistenceContext(unitName = "employee")
private EntityManager manager;
public Employee getEmployeeById(long id) {
return manager.createNamedQuery(Employee.GetEmployeeById).getResultList();
}
...
}
Il n'y a pas de juste milieu ici? Quelqu'un a trouver une architecture ou mis en œuvre une architecture qui répond à certains des avantages d'une couche DAO (le plus important de l'unité de la testabilité de la logique métier) que je l'ai mentionné ci-dessus, mais n'implique pas de tous les coûts pour mettre en œuvre une couche DAO?
Merci pour toutes les recommandations et/ou suggestions! Je suis vraiment curieux de voir ce que certaines personnes ont eu à cet égard.