В
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
}
}
