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 и в этом случае следить за сущностями по карте соответствия или нет.