Я создаю свой собственный Query Builder, используя php, который также может выполнять запросы и получать результаты из базы данных. Сначала у меня была эта функциональность в одном классе, однако, подумав, я считаю, что QueryBuilder и DBProcessor должно быть два отдельных класса.
class QueryBuilder {
var $query;
...
function select()
function from()
function join()
function where()
...
}
class DbProcessor {
...
function execute()
function rowCount()
function startTransaction()
function lastInsertId()
...
}
Проблема, которую я имею, состоит в том, чтобы использовать это вместе, пытаясь придерживаться других хороших соглашений программирования (слабая связь)
Должен ли я создать конструкцию в QueryBuilder так что экземпляр DbProcessor должны быть переданы при создании? Однако эта идея, похоже, идет не так, как хотелось бы, чтобы в конечном итоге дублировались имена методов внутри моего QueryBuilder просто вызывать методы внутри DbProcessor вроде как следующее
class QueryBuilder {
var $DbProcessor;
function select()
...
function rowCount()
{
$this->DbProcessor->rowCount()
}
function startTransaction()
{
$this->DbProcessor->startTransaction()
}
}
Этот способ, кажется, добавляет дубликаты имен методов, и кажется, что лучше просто поместить DbProcessor внутри QueryBuilder.
Как я могу достичь того, что я хочу здесь?
Я сделал нечто подобное в личном проекте. В моем случае ваш QueryBuilder
, отвечает только за построение SQL-операторов, возвращающих строковую переменную. Нет казней. Только ткань чистая строка SQL. С другой стороны, database
, имеет метод для выполнения предложения SQL, которое передается в качестве аргумента. Затем, чтобы организовать выполнение всего запроса, у меня есть другой класс, xxxRepository.java
где я буду иметь все методы сущностей вида getXXXById()
, Это призывает QueryBuilder.java
возвращая SQL, что я хочу выполнить, а затем я передал его Database.java execute()
метод для получения результатов.
Других решений пока нет …