В
SomeService
зависит от конкретного RedisStore
и внутри этого класса использует методы исключительно принадлежащие этому RedisStore
.Проблема в том, что если ты захочешь
RedisStore
поменать на DbStore
, то тебе придется менять и SomeService, потому что в нём используется к примеру метод redisSpecificMethod
который есть ТОЛЬКО в RedisStore
. По этому мы делаем абстракциюclass SomeService
{
public function __construct(Store $store)
{
$store->method();
}
}
interface Store
{
public function method();
}
class RedisStore implements Store
{
public function method()
{
// redis specific logic
}
}
class DbStore implements Store
{
public function method()
{
// database specific logic
}
}