@thorii

CacheProvider, какими стандартами и практиками пользоваться при написании на php?

CacheProvider, какими стандартами и практиками пользоваться при написании на php?
Собственно я задумал кэшпровайдер лишь как класс единого API кэширования, но стал вопрос, как указывать драйвер для работы с кэшем?

На текущий момент у меня так:
<?php
$cache = new CacheProvider(CacheProvider::DRIVER_REDIS, $configRedis);
$cache->set('key', 'value');
?>

Вопрос в следующем: Критично ли использование констант для идентификации драйвера? То есть в самом классе прописаны константы идентификации:
const DRIVER_REDIS = 0;
const DRIVER_MEMCADHED = 1;
const DRIVER_FILE = 2;

По этим ID в конструкторе из конфига грузится путь класса драйвера и создание его экземпляра:
Cache.Config.php
<?php
$config = array(
	'drivers' => array(
		'0' => array(
			'name' => 'RedisDriver',
			'lib' => '\Architect\Cache\Drivers\RedisDriver'
		),
		'1' => array(
			'name' => 'MemcachedDriver',
			'lib' => '\Architect\Cache\Drivers\FileDriver'
		),
		'2' => array(
			'name' => 'FileDriver',
			'lib' => '\Architect\Cache\Drivers\FileDriver'
		)
	)
);
?>

При добавлении драйверов приходится прописывать константу идентификации. Может переписать на именованном конструкторе?
$cache = CacheProvider::driver('REDIS');
$cache->set('key', 'value');

Или меня просто параноит за зря и мне надо избавиться от констант и прописывать строкой имя драйвера?
$cache = new CacheProvider('REDIS', $driverConfig);

P.S. Очень трепетно отношусь к мелочам.
-Подсмотреть Доктрину/Symfony/Laravel/YII/CI не предлагайте пожалуйста.

Используется ли в таких случаях именованный конструктор?
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
by25
@by25
Веб-разработчик
Лучше создаввать конкретный экземпляр класса, вида RedisCacheProvider реализующий общий интерфейс, наприер CacheProviderInterface.
Подсмотреть можно здесь: https://github.com/doctrine/cache

Также, создание объектов я бы вынес в DI-контейнер. И почитайте про инверсию зависимостей (если нужно).
Ответ написан
Ваш ответ на вопрос

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

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