Для подключения к бд и работы с ней использую две библиотеки commons dbutils и commons dbcp2 (пул подключений к бд).
Есть три класса в которых прописаны запросы к бд. Все эти классы отвечают за свой функционал (не просто так разделил)^
DataBaseUser
public class DataBaseUser {
private QueryRunner queryRunner;
public DataBaseUser(BasicDataSource basicDataSource) {
this.queryRunner = new QueryRunner(basicDataSource);
}
...
}
DataBaseAdmin
public class DataBaseAdmin {
private QueryRunner queryRunner;
public DataBaseAdmin(BasicDataSource basicDataSource) {
this.queryRunner = new QueryRunner(basicDataSource);
}
...
}
DataBaseChat
public class DataBaseChat {
private QueryRunner queryRunner;
public DataBaseChat(BasicDataSource basicDataSource) {
this.queryRunner = new QueryRunner(basicDataSource);
}
...
}
Как видно конструктор у всех один, но методы разные (дубликатов нет).
Хотелось бы создать один класс который бы смог получить доступ ко всем методам этих трех классов. Как правильно такое сделать? сделать класс обертку который в себе будет хранить все три класса? или как.
Еще. использование этих классов сейчас выглядит таким образом:
BasicDataSource basicDataSource = Core.getDataSource();
DataBaseAdmin dbAdmin = new DataBaseAdmin(basicDataSource);
DataBaseChat dbChat = new DataBaseChat(basicDataSource);
...
basicDataSource.getConnection().close();
Тут я беру DataSource
который предоставляет библиотека dbcp2
передаю в QuerryRunner
который их DbUtils
. Он же в свою очередь берет подключение из пула. В последней строке возвращаю подключение в пул свободных.
Именно так "сделать класс обертку который в себе будет хранить все три класса":
class BusinessLogic {
private BasicDataSource basicDataSource;
private DataBaseUser dataBaseUser;
private DataBaseAdmin dataBaseAdmin;
private DataBaseChat dataBaseChat;
public BusinessLogic(
BasicDataSource basicDataSource,
DataBaseUser dataBaseUser,
DataBaseAdmin dataBaseAdmin,
DataBaseChat dataBaseChat) {
this.basicDataSource = basicDataSource;
this.dataBaseUser = dataBaseUser;
this.dataBaseAdmin = dataBaseAdmin;
this.dataBaseChat = dataBaseChat;
}
public doLogic() {
//DO MY LOGIC
basicDataSource.getConnection().close(); //не очень хорошо закрывать подключение здесь, так как подключение должно закрываться там, где открывалось
}
}
Только добавить интерфейсы User, Admin, Chat вместо конкретных классов. И в классе использовать интерфейсы.
class BusinessLogic {
private BasicDataSource basicDataSource;
private User user;
private Admin admin;
private Chat chat;
public BusinessLogic(
BasicDataSource basicDataSource,
User user,
Admin dataBaseAdmin,
Chat dataBaseChat) {
this.basicDataSource = basicDataSource;
this.user = user;
this.admin = admin;
this.chat = chat;
}
public doLogic() {
//DO MY LOGIC
basicDataSource.getConnection().close(); //не очень хорошо закрывать подключение здесь, так как подключение должно закрываться там, где открывалось
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Нужно создать "Планировщик задач на Java"Мы с другом надумали:
Есть какая-то строка, как сделать анимацию смахивания, чтобы оно уезжало влево и удалялось (функционал удаления есть, но просто на кнопке)?
Я запускаю поток, который создаю этим методом: