Для подключения к бд и работы с ней использую две библиотеки 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(); //не очень хорошо закрывать подключение здесь, так как подключение должно закрываться там, где открывалось
}
}
Топ-20 лучших университетов мира по IT и программированию – Образование за границей
Здравствуйте! Нужно создать "Планировщик задач на Java"Мы с другом надумали:
Есть какая-то строка, как сделать анимацию смахивания, чтобы оно уезжало влево и удалялось (функционал удаления есть, но просто на кнопке)?
Я запускаю поток, который создаю этим методом: