Как лучше реализовать бизнес логику в Spring MVC?

383
03 июня 2017, 15:17

Привет. Пишу свой первый проект на 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();
    }
}
READ ALSO
Цикл for и деление на массивы командой split

Цикл for и деление на массивы командой split

есть табличка html, она может быть разной длины:

378
XStream , как сериализовать коллеции без дополнительной информации?

XStream , как сериализовать коллеции без дополнительной информации?

Сериализую при помощи XStream мой Entity Class из Hibernate private static

440
Поиск разницы между датами

Поиск разницы между датами

Должен написать многопоточную программуОдин из этапов разработки - поиск разницы во времени (разница может быть в годах, в месяцах или днях,...

542
Подскажите, как реализовать поиск по sub item [требует правки]

Подскажите, как реализовать поиск по sub item [требует правки]

По основному все вышло прекрасно с помощью getFilter, а вот как проделать то же с sub items понять не могу

353