Просмотр поста

.
L!MP

Delphinum, ну, про контейнеры по говорили. Теперь вот ещё какая интересная штука.
Ты же наверняка знаешь о IdentityMap, так вот, контексте использования этого паттерна в ORM.

Допустим есть у нас такой псевдокод:

$entityOne = $orm->getByOid(5);
$entityTwo = $orm->getByOid(5);

var_dump($entityOne === $entityTwo); //=> true, потому что у нас там под капотом есть IdentityMap который сравнил oid и второй раз не стал делать запрос к БД, а вернул уже имеющуюся сущность


И тут всё просто и понятно, но как быть с более сложными запросами.
На пример мы извлекаем сущности по условию соответствия какому то сложному условию.

$entityOne = $orm->newQuery()->where('login', '=', 'L!MP')->getFirst();
$entityTwo = $orm->newQuery()->where('login', '=', 'L!MP')->getFirst();

var_dump($entityOne === $entityTwo); //=> как тут быть, ведь есть ещё более сложные случаи, на пример, получили одну сущность, а затем коллекцию сущностеё по какому-то условию и в коллекцию попадает эта же сущность, нужно ли делать так чтоб они были идентичными?


Должен ли ORM и в этом случае следить за сущностями по карте соответствия или нет.