Вам не нужен DAO как таковой, но эти ответы не являются неправильными.
Разделение концерна
То, что вам нужно сделать, это отделить ваше приложение на основе интересов, который представляет собой шаблон, называемый разделение интересов . Это утечка, когда проблемы перекрываются, поэтому для борьбы с этим вы должны разделить ваше приложение на слои или стек, основываясь на проблемах. Типичный стек может включать в себя:
Data Access Layer (read/write data)
Service Layer (isolated business logic)
Controller (Link between view and model)
Presentation (UI)
и т. Д., Но это только частично решит вашу проблему.
Программа для интерфейса
Вы также (как уже упоминали другие) должны абстрагировать свой код, что позволит вам использовать внедрение зависимостей . Это очень легко осуществить. Все, что вам нужно сделать, это запрограммировать интерфейс :
public interface PersonService {
public List<Person> getAllPersons();
public Person getById(String uuid);
}
Итак, ваше приложение будет выглядеть так:
public class PersonApp {
private final PersonService personService;
public PersonApp(PersonService personService) {
this.personService = personService;
}
}
Почему это лучше?
Вы определили контракт для взаимодействия с моделью Person в интерфейсе, и ваше приложение придерживается этого контракта без какого-либо воздействия на детали реализации. Это означает, что вы можете реализовать PersonService с помощью Hibernate, а затем решить, что хотите использовать JPA, или, возможно, вы используете прямой JDBC, или Spring, и т. Д. И т. Д., И даже если вам придется рефакторировать код реализации, код вашего приложения остается тот же самый. Все, что вам нужно сделать, это поместить новую реализацию в classpath и найти ее (совет: шаблон Service Locator будет хорошо работать для этого).