212 похожих чатов

Приветствую. Вот мы определил свой ограниченный контекст. Определили его агрегаты,

сущности и их объекты-значения. Определили интерфейсы их репозиториев. В репах простые методы:
/**
* @throws ProductAlreadyExistException
*/
public function add(Product $product): void;

/**
* @throws ProductDoesNotExistException
*/
public function get(Identity $identity): Product;

/**
* @throws LogicException
*/
public function save(Product $product): void;

/**
* @throws LogicException
*/
public function remove(Product $product): void;
Далее, реализуем эти репозитории, например inMemory:
class InMemoryProductRepository implements ProductRepositoryInterface
{
// реализуем методы ProductRepositoryInterface
}
Или DoctrineRepository:
class DoctrineProductRepository extends ServiceEntityRepository implements ProductRepositoryInterface
{
// реализуем методы ProductRepositoryInterface
}

Для работы с хранилищем через Doctrine для всего этого дела запилили xml mapping наших доменных агрегатов, сущностей и объектов-значений. На удивление - это получилось сделать сведя на нет влияние на доменную логику. Всё взлетело и всё как бы работает. Но! Возникает вопрос, у Doctrine\ORM\EntityRepository есть куча замечательных методов, например:
public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null)
public function findOneBy(array $criteria, ?array $orderBy = null)
// Замечательный magic call:
public function __call($method, $arguments)
public function matching(Criteria $criteria)

Теперь в приложении мы ведь не можем использовать всю эту прелесть и магию доктрины? Потому что все этим методы не определены нашим доменным интерфейсом. И как быть? Особенно интересует возможность делать find через Criteria. Я в тупике🙇🏻‍♂️

9 ответов

24 просмотра

Не наследовать EntityRepository, а инжектить его внутрь своего

Nikolay-Deriglazov Автор вопроса
Nikolay Underground
Не наследовать EntityRepository, а инжектить его в...

А как ты потом свой репозиторий подсунешь в маппинг сущности? Он же должен быть ServiceEntityRepository

Nikolay Deriglazov
А как ты потом свой репозиторий подсунешь в маппин...

Его не надо подсовывать в сущность, ты через getRepository(Entity::class) уже указал, с какой сущностью репа работает.

Nikolay-Deriglazov Автор вопроса
Nikolay Underground
не совсем понял

И впрямь, сейчас попробовал подставить свой InMemoryRepository который не наследует ServiceEntityRepository - всё заработало. Я почему-то думал, что repository-class в маппинге, всегда должен наследовать ServiceEntityRepository

Vadim
Его не надо подсовывать в сущность, ты через getRe...

А можно по подробнее на этом моменте 🙏🏼

Ержан
А можно по подробнее на этом моменте 🙏🏼

final class DatabaseEmployeeRepository implements EmployeeRepository { /** * @var EntityRepository<Employee> */ private EntityRepository $repo; public function __construct(EntityManagerInterface $em) { $this->repo = $em->getRepository(Employee::class); }

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта