Interface vs Provider, есть ли разница при реализации нижеописаного функционала?

Допустим на примере класса кэширования.
Нужно написать функционал для нескольких движков кэширования (Redis, File, SQLite).

С одной стороны можно написать CacheProvider описывающий общие методы для кэширования (get, set) и подключающий нужные "драйверы" через именованные конструкторы.
Примерно вот так я вижу использование:
$cache= CacheProvider::redis(array $cfg) //@return Redis instance
//Или
$cache = CacheProvider::driver(string CacheProvider::DRIVER_REDIS, array $cfg);

Минусы которые я вижу:
  • При создании нового драйвера, нужно обновлять класс Cache и добавлять новый конструктор (В случае с "Или" - константу)
  • Отслеживать чтоб, Кол-во конструкторов было равно кол-ву драйверов (В случае с "Или" - константы)
  • Появится дополнительная зависимость от класса посредника CacheProvider


С другой стороны, можно написать интерфейс и имплементировать его непосредственно в классах RedisCache, FileCache
Использование:
$cache = new RedisCache(array $cfg);В этом методе пока не вижу минусов. Если они все же есть, откройте мне глаза. Гуглил Interface vs Provider Но внятного не нашел.
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы