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 ответов

8 просмотров

Не наследовать 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); }

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

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

сурсы: import std/asyncdispatch, std/httpclient, std/json, std/sequtils, std/strutils, std/unicode, std/unidecode, std/uri, uuid4, regex const GPT4_API...
Qtless Qtless
4
А ещё docker можно к ассемблеру прикрутить. В целом, системы сборки это настолько несвязанная вещь... Это оффтоп, можно сказать, во всех чатах. Это просто проект, который помо...
КТ315
22
Кто-нибудь может проверить на 11.3 и более ранних версиях, последнее число в трех нижних строках одно и тоже или нет? var Dict: TDictionary<Integer, string>; i, j: Intege...
Boris N (MBo)
6
Раз пошла тема про XML... Delphi XE 10.4.2(но это не важно), XML Data Binding Несколько XSD. В основном содержатся include на расширения. Несколько Namespace, это важно. Бин...
Alexey Gavrilov
4
вот что получается в интерпрететоре, работает и результаты выгляд разумными, но то как выглядит код мне не нравиться, а понять куда двигаться не очень могу, если кому не лень ...
Fedor
42
ребята, вы после работы успеваете/хватает сил время на себя потратить, допустим в зал и тд? особенно те кто на удаленке
Marat
10
Было открыто два проекта в Xcode. В одном делал билд, а в другом просто ковырялся. Проц разогрелся до 99 градусов, изображение на дисплее посыпалось и через 5 секунд комп выру...
Alexander Sherbakov
7
получается, что он находит одинаковое колво тегов, с разными именами, или я что тто не понял в таксоупе ?
Fedor
46
вот еще вопрос ошибка app/Main.hs:135:13: error: [GHC-83865] • Couldn't match type: MoveInfo -> Coords with: (Int, Int) Expected: Coords ...
Fedor
21
Какие в фасме есть определения для 128 и 256-битных слов?
The Bird of Hermes
12
Карта сайта