Koenig, спасиб) буду перечитывать пока не въеду если что кидай в лику полезное по веб ЯП
Koenig, спасиб) буду перечитывать пока не въеду если что кидай в лику полезное по веб ЯП
# Delphinum (29.11.2016 / 22:21)Ну да. Я тебе говорил про прокси в этом же трэде раннее и давал ссылку на эту же библиотеку.
L!MP, там сложная логика, реализуется через стороннее решение. По сути да, это прокси содержащий саму
L!MP, можно было бы через прокси, но мне было лень ) реализовал проще
имеет смысл прикрутить родительские контейнеры (правда это повлияет на поток исполнения и замедлит работу контейнера в целом) и инициализаторы.
but we highly discourage their usage.
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); //=> как тут быть, ведь есть ещё более сложные случаи, на пример, получили одну сущность, а затем коллекцию сущностеё по какому-то условию и в коллекцию попадает эта же сущность, нужно ли делать так чтоб они были идентичными?В доктрину я не лез, меня малость подташнивает когда я начинаю пробовать разобраться в её работе.
Так что я про смотрел несколько библиотек, пока только на РНР и вижу что карта соответствия у них работает только на запросы по Oid (типа ->getByOid(1) и ->getByOids(1, 2, 3)).
L!MP, по хорошему она должна работать всегда, но лично я вообще не вижу в ней смысла, так как ни разу еще не сталкивался с проблемами, вызванными сравнением объектов, ведь можно просто сравнить их по id и будет счастье
И да, смысл IdentityMap не в том, что оно не выполняет доп запросы к базе (для этого есть кеш). Этот паттерн позволяет избежать проблем с дублированием: "Если разработчик не достаточно аккуратен, может получиться, что он загрузит данные из БД в два объекта. Потом, когда он сохранит их, получится путаница и конкуренция различных данных."
# Delphinum (02.12.2016 / 23:04)Я понимаю зачем он нужен, я просто описывал последовательность действий, что сущность второй раз из БД не запрашивается, а возвращается та, что уже создана.
И да, смысл IdentityMap не в том