У меня проблемы с реализацией сервисного уровня, я думаю, что я не очень хорошо понял эту концепцию.
В реализации DAO я могу написать всю логику CRUD для конкретной технологии и объекта (например, Hibernate)и пользовательская таблица), а на уровне сервиса мы используем DAO для всех операций с данными для объекта в DAO (например, getUser, loginUser и т. д.), это нормально?
Если все в порядке, у меня естьпростой вопрос, могу ли я обработать соединение с базой данных (или в случае спящего режима, сеанса и транзакции) на уровне сервиса, реализацию DAO или ни одного?
Например, у меня есть простой графический интерфейс с одной кнопкой (загрузить всех пользователей),и таблица будет содержать всех пользователей.Нажатие кнопки загрузит таблицу со всеми пользователями.
У меня есть объект HibernateDAO для пользователя (UserHibernateDAO), содержащий все операции CRUD и сервисный уровень, UserService, для некоторых конкретных операций с данными пользователя.
ServiceLayer:
public class UserService extends AbstractServiceLayer{
private AbstractDAO dao;
public UserService(AbstractDAO dao){
this.dao=dao;
}
public List<User> loadAllUsers(){
return dao.findAll();
}
}
В действии выполнено для кнопки:
private void buttonActionPerformed(ActionEvent evt) {
Transaction transaction=HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
List<User> users=userService.loadAllUsers();
loadTableWithUsers(users);
transaction.commit();
}
Эта реализация в порядке?Дескриптор сеанса и транзакции находится в правильном положении, или я должен поместить его в сервисный уровень?..или, может быть, в дао?
EDIT1:
Если у меня есть интерфейс UserDAO и UserHibernateDAO, который реализует UserDAO, сервисный уровень не имеет никаких оснований для существования, не 'правда?Поскольку у меня может быть весь метод для управления «ПОЛЬЗОВАТЕЛЕМ» внутри моего UserDAO, а UserHibernateDAO реализует все эти методы для технологии гибернации ... тогда я мог бы иметь UserJdbcDAO, UserMysqlDAO и т.д ... ммм ...
РЕДАКТИРОВАТЬ2:
private void buttonActionPerformed(ActionEvent evt) {
myBusinessMethod();
}
private void myBusinessMethod(){
Transaction transaction=HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
List<User> users=userService.loadAllUsers();
loadTableWithUsers(users);
//some other useful operation before close session
transaction.commit();
}
Я не уверен, что бизнес-метод - это такой метод?
Спасибо всем.