Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
interface StorageInterface {
public function add($item);
public function update($item);
public function delete($item);
public function getById($id);
public function getByIds(array $id);
}
class RedisStorage implements StorageInterface {
...
}
class MysqlStorage implements StorageInterface {
...
}
class MemoryStorage implements StorageInterface {
...
}
class UsersRedisStorage extends RedisStorage {
public function add(User $item);
public function update(User $item);
public function delete(User $item);
}
class PointsMysqlStorage extends MysqlStorage {
public function add(Point $item);
public function update(Point $item);
public function delete(Point $item);
}
interface Entity {
public function get($field);
public function set($field, $value);
public function imort(array $data);
/**
* @return array
*/
public function export();
}
class User implements Entity {
...
}
class UsersRedisStorage extends RedisStorage {
public function add(User $item) {
$userData = $item->export();
// Вот тут валидируем $userData
// Или переводим в json: $userData = json_encode($userData);
parent::add($userData);
}
public function getById($id) {
$userData = parent::getById($id);
$User = new User();
$User->import($userData);
return $User;
}
}
namespace Acme\MyApp\Repository;
use Acme\Storage\Storage;
use Acme\MyApp\Domain\Repository\UserRepositoryInterface;
class UserRepository implements UserRepositoryInterface
{
/**
* @var Storage
private $sorage;
function __constructor(Storage $storage)
{
$this->storage = $storage;
}
getBannedUsers()
{
// ...
return $this->storage->find($criteria);
}
// ...
}
Чаще видел что storage используется во фронтенде, а репозитории на беке
PostRepository
хранится же author_id
или что-то подобное, а значит можно сформировать критерий для фильтрации и вытащить нужные постыЦентральной концепцией ООП является инкапсуляция.Не согласен, центральная концепция ООП — это полиморфизм.
Паттерн «Репозиторий». Основы и разъяснения