Я использую Spring + Hibernate для настольного приложения Swing, и в данный момент у меня есть gui/ Уровень качания->уровень обслуживания->уровень дао. Я использую Spring только для поддержки @Transactional и IOC-инъекций
Лучшая практика гласит, что мне нужно написать сервис для использования моего daos и поместить все управление транзакциями в service.
Но я понимаю, что очень часто уровень обслуживания только копирует методы dao, например:
Код: Выделить всё
// a DAO example
@Repository
public class CustomerHibernateDAO extends BaseHibernateDAO implements CustomerDAO {
public List findAllCustomerILikeName(String name){
return getSession()
.createCriteria(Customer.class)
.add(Restriction.ilike("name", name))
.list();
}
}
// Customer service to use this dao...
@Service
@Transactional
public class CustomerService {
@Autowired
CustomerDAO customerDAO;
// Why i can't call DAO instead the service?
public List getAllCustomersByName(String name){
return customerDAO.findAllCustomerILikeName(name);
}
}
А как насчет уникального класса обслуживания для управления всеми DAO?? Я думаю, что это может быть хорошим компромиссом или плохой практикой?
Я знаю, что использование @Transactional в DAO — плохой способ, но в данный момент мне приходится писать сервисы только для размещения на нем @Transactional...
РЕДАКТИРОВАТЬ
Дополнительная информация о моем приложении.
Мое приложение представляет собой программное обеспечение для управления регистрацией пользователей, продуктами, заказами и другими подобными вещами.
На практике оно содержит множество операций чтения объекта->редактировать->сохранения объекта или создания->редактирования->сохранения, и благодаря спящему режиму эти операции большую часть времени управляются ОДНИМ dao, потому что спящий режим с коллекцией @manyto... и каскадом .save_update позволяет сохранять два или более объекта в одной операции сохранения.
Так, например, в моих элементах JFrame, где я могу вставлять, редактировать или создавать элемент ( товар на продажу) есть:
Код: Выделить всё
public ItemFrame(){
// the constructor
itemService=springAppContext.getBeans(ItemService.class);
}
public boolean validateForm(){
// test if the gui is correctly filled by user
}
public boolean save(){
// create an Item entity taking value from swing gui(JTextField etc)
Item item=new Item();
item.setName(nameTextField.getText());
item.setEtc...
// ItemService ' save method is a wrap around itemDao.save(item)...
itemService.save(item);
}
private void saveItemActionPerformed(ActionEvent evt){
// When i press SAVE button
if(validateForm()){
save();
}
}
Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/427 ... pplication