Привет. Пишу свой первый проект на Spring(онлайн банк). В банке есть три сущности: users, cards, и transactions. Есть две роли: админа и пользователя. Админ будет выполнять CRUD операции с пользователями, картами и транзакциями. У пользователей будет возможность переводить деньги между собой по номеру карты и возможно заказ на открытие новой карты с подтверждением админа. Слой DAO выполняет у меня доступ к базе. В нем реализованы операции CRUD. В слое Servise у меня по идее должна быть остальная бизнес логика. Но возникает следующий вопрос как лучше реализовать логику, просто расширив классы сервиса дополнительными методами?
Класс с сущностью
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Transient
private String confirmPassword;
@ManyToMany
@JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getConfirmPassword() {
return confirmPassword;
}
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
Класс c DAO
@Repository
public class UserDaoImpl implements UserDao {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public void addUser(User user) {
Session session = this.sessionFactory.getCurrentSession();
session.persist(user);
}
@Override
public void updateUser(User user) {
Session session = this.sessionFactory.getCurrentSession();
session.update(user);
}
@Override
public void removeByUserId(int id) {
Session session = this.sessionFactory.getCurrentSession();
User user = (User) session.load(User.class, new Integer(id));
if(user != null){
session.delete(user);
}
}
@Override
public User getUserById(int id) {
Session session = this.sessionFactory.getCurrentSession();
User user = (User) session.load(User.class, new Integer(id));
return user;
}
@Override
public List<User> getListUsers() {
Session session = this.sessionFactory.getCurrentSession();
List<User> users = session.createQuery("from User").list();
return users;
}
Класс с Service
@Service
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
@Transactional
public void addUser(User user) {
this.userDao.addUser(user);
}
@Override
@Transactional
public void updateUser(User user) {
this.userDao.updateUser(user);
}
@Override
@Transactional
public void removeByUserId(int id) {
this.userDao.removeByUserId(id);
}
@Override
@Transactional
public User getUserById(int id) {
return this.userDao.getUserById(id);
}
@Override
@Transactional
public List<User> getListUsers() {
return this.userDao.getListUsers();
}
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости