Применение SRP вызывает проблемы. Как?

Я создаю свой собственный 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.

Как я могу достичь того, что я хочу здесь?

0

Решение

Я сделал нечто подобное в личном проекте. В моем случае ваш QueryBuilder, отвечает только за построение SQL-операторов, возвращающих строковую переменную. Нет казней. Только ткань чистая строка SQL. С другой стороны, database, имеет метод для выполнения предложения SQL, которое передается в качестве аргумента. Затем, чтобы организовать выполнение всего запроса, у меня есть другой класс, xxxRepository.java где я буду иметь все методы сущностей вида getXXXById(), Это призывает QueryBuilder.java возвращая SQL, что я хочу выполнить, а затем я передал его Database.java execute() метод для получения результатов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]