У меня есть набор сервисов, которые расширяют общий класс, который предоставляет некоторые общие функции между ними.Насколько плохо использовать черту вместо наследования или композиции в этом случае для повторного использования кода?
Конкретная группа этих служб имеет одну общую черту: они используют определенный ресурс в API, поэтому у них есть много общего кода (для подключения к API и выполнения GET или POST, API, в основном изменяя конечную точку и количество передаваемых параметров).
Мой вопрос: не так ли абстрагировать этот код по признаку? и повторно использовать его для любых служб, которые должны использовать этот конкретный фрагмент кода?
Вот несколько примеров:
trait ApiResource {
public function retrieve()
{
try {
// apply logic of the resource
} catch (\Exception $e) {
return false;
}
}
}
class Departments extends Generic {
use ApiResource;
public function createCache(Cache $cache)
{
$cache->storeDepartments($this->retrieve('departments', 200));
}
}
class Brands Generic {
use ApiResource;
public function createCache(Cache $cache)
{
$cache->storeBrands($this->retrieve('brands'));
}
}
Это не так. Trait - это копировальная папка с поддержкой языка. Нет ничего плохого в том, чтобы использовать его так, как вы хотите. –
Это довольно основанный на мнениях вопрос, поэтому я считаю, что он находится на грани того, что позволяет SO. При этом я редко нахожу черты хорошей идеей, хотя исключения существуют. Мне кажется, что здесь будет лучший вариант. Какой-то ApiConnector, который может находиться внутри свойства ваших ApiResources и использоваться для фактической связи с API. – Pevara