Ho queste due classi (Getter / Setter / Constructor omessi):
public class Company {
private String name;
private String adress;
private List<Employee> employees;
private Uuid id;
}
public class Employee {
private String name;
private int age;
private Uuid id;
}
Le due entità e la loro relazione sono modellate in un database relazionale utilizzando le tabelle COMPANY
, EMPLOYEE
e EMPLOYMENT
.
Ora voglio scrivere le classi DAO per gestire la persistenza delle due entità e la loro relazione. Il modo semplice sarebbe creare un DAO per ognuno e avere CompanyDao
di utilizzare internamente EmployeeDao
. Ma secondo alcune risposte Stackoverflow che ho letto, si tratta di un odore del design e dovrebbe essere rifattorizzato in metodi di servizio che utilizzano i DAO senza che questi debbano dipendere l'uno dall'altro.
Questo è il modo in cui implementerei questo metodo di servizio:
public class DBService {
public DBService(CompanyDao companyDao, EmployeeDao employeeDao,
EmploymentDao employmentDao) { ... }
public Company findCompany(Uuid companyId) {
Company company = companyDao.find(companyId);
List<Uuid> employeeIds = employmentDao.findEmployeeIds(company.getId());
for(Uuid employeeId : employeeIds) {
company.addEmployee(employeeDao.find(employeeId));
}
}
}
Questo è un buon modo per farlo? O il EmployeeDao
dovrebbe avere un metodo findByCompany(Uuid companyId)
?
Informazioni: ho già chiesto una domanda di smiliar su Stackoverflow, ma le uniche risposte che ho ricevuto sono state "Utilizzare uno strumento ORM" . So che qualcosa come Hibernate gestirà tutta la perseveranza per me, ma mi piacerebbe sapere come farlo a mano.