@parkito

Как правильно организовать архитектуру приложения?

Здравствуйте. Подскажие, пожалуйста, как лучше сделать архитектуру приложения.
Пишу веб-приложение, которое будет добавлять в базу и читать из нее информацию пользователей, а так же об их товаров.

Я описал все entities

public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "user_id")
    private int userId;
    @Basic
    @Column(name = "name")
    private String name;
...


Сделал DAO слой

public class UserDAO extends {
    public User getUserByNumber(String number) throws UserNotFoundException;
    public User getUserByEMAil(String eMail) throws UserNotFoundException;
...


Слой сервисов.

public class UserService {
    private UserDAO userDAO = new UserDAO();

  
    public void createEntity(User user) throws CustomDAOException {
        if (!isUserExists(user))
            userDAO.create(user);
        else System.out.println("User already exists");
    }
...


Теперь я не знаю как поступить с созданием EntityManagerFactory и EntityManager Где их лучше разместить? Как сделать так, чтобы они закрывались, успешно завершив программу (где их лучше закрывать?) в многопоточном режиме?
  • Вопрос задан
  • 369 просмотров
Решения вопроса 1
@McKey92
Разроботка ПО
Могу предложить следующую иерархию (структуру пакетов) в простом варианте, может выглядеть так:
com.example.application:
в нем следующие слои:
  • domain - предметная область, видимая для сервисов и котроллеров (Проще говоря, здесь будут сущности которые будет отдавать Ваш сервис или использоваться котнтроллерами, напривем User(name, age))
  • repository - Ваши DAO, DTO будут здесь, это уровень абстракции который инкапсулирует работу с конкретным хранилищем (хранилищами) данных
  • service - прослойка с которой будет взаимодействовать приложение (приложения), ну а он с repository и формировать уже кокретный результат (всех User'ов и которые купили Слона за последних пол года)
  • web (controller/ REST и т.д.) - обработчики, которые будут использовать ваши сервисы для процессинга данных или давать возможность другим приложениям взаимодействовать с вашими данными


соотвтественно в resourse выносим всю конфигурацию (контексты приложения, конфигурации, properties) и тоже желательно все по папочкам (фреймворки которые используются, например spring, hibernate, или же Java EE спецификация которая отвязывает нас, ну или пытаеться это сделать, от конкретных провайдеров) :)

Советую еще погуглить SOA/microservices

А также полезная статейка Учимся проектировать на основе предметной области ...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zolt85
@zolt85
Программист
Просто опишите их в конфигурации, Hibernate все остальное сделает за вас. Только почитайте документацию, прежде чем городить огород.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы