DataManager::getList разделить на два метода для возможности нормального наследования и расширения

Рейтинг: 7.7074  
Новая
Предложил serginhold 04.09.2017 22:41:05

DataManager::getList разделить на два метода для возможности нормального наследования и расширения

В связи с тем что внутри метода getList создается новый Query и в итоге возвращается готовый sql запрос, есть невероятная проблема расширения параметров при наследовании DataManager.

Мне вот для sphinx потребовался новый параметр 'match', и чтобы мне туда его засунуть, мне нужно полностью переписать метод getList, т.е. скопипастить все что есть в исходниках этого метода и где-то в серединку добавить 'match'. А должно быть как-то так:

public static function getList(array $parameters = [])
{
    $query = parent::getList($parameters);

    if (isset($parameters['match']))
    {
        $query->setMatch($parameters['match']);
    }

    return $query;
}


С учетом того что эта функция должна возвращать Result, а не Query, нужно добавить внутри хотя бы один метод, вместо кучи кода обработки параметров, т.е. сделать хотя бы так:

public static function getList(array $parameters = [])
{
     return static::buildQuery($parameters)->exec();
}

public/*protected?*/ static function buildQuery(array $parameters = [])
{
    $query = static::query();
    // тут текущий код
    return $query;
}


Тогда в метод buildQuery можно будет без проблем добавить любой новый параметр.

А в данный момент нужно именно копипастить код, да и еще в 17 версии появился ключ 'cache', и вот допустим у меня старая версия ядра, и если мне нужен этот ключ 'cache' в моем DataManager для sphinx, уже после обновления, то мне надо опять скопипастить новые исходники.