Delphinum, ну как я понял, ты хочешь сразу генерировать класс и коментарии под доктрину
# Koenig (03.12.2016 / 12:27)
AlkatraZ, обсервер же в spl готовый имеется
Репализации там нет, только интерфейс

И при чем тут SPL, если мы говорим про мануалы по патернам?
# Koenig (03.12.2016 / 12:52)
Delphinum, ну как я понял, ты хочешь сразу генерировать класс и коментарии под доктрину
Она сама это умеет делать. Там на борту есть нужные инструменты.
Koenig, ну ты там создаешь метаданные типа "Новость", задаешь ей поля и их типы, задаешь виджеты для отображения этих полей в GUI (обычно задается автоматом на основании типа) и после можешь сам или твои посетители создавать объекты этих метаданных типа "Новость" с конкретными значениями полей.
Соль в том, что модули приходят с базовым набором метаданных и полей, а любой админ может их легко дополнить необходимыми ему полями. На пример, ты ставишь себе модуль "Загруз цент", но тебе не хватает для каждого файла поля "Автор" или "Каталог", вот как админ с такой схемой ты можешь легко добавить эти поля без необходимости менять сам модуль.
AlkatraZ, верно, на борту у доктрины есть много полезных инструментов. Да вообще в процессе разрешения зависимости доктрины ставится чуть ли не половина пакагиста ))
# Koenig (03.12.2016 / 12:52)
Delphinum, ну как я понял, ты хочешь сразу генерировать класс и коментарии под доктрину
в комментах не хочу, аннотации можно хранить в xml или yaml, так будет проще в использовании.
# Delphinum (03.12.2016 / 12:39)
L!MP, Ничего страшного не будет, ведь сохраняются объекты в IM по индексу их id, и поиск так же производится по этому индексу, следовательно сложность поиска O(n), что не очень страшно. Но повторюсь,
Ну так смотри. Мы запрашиваем сущность по айди, сохраняем её в карте соответствия, затем выполняем запрос на получение той же сущности, но по другому критерию, на пример мылу.
На этапе формирования запроса понять что второй раз мы запрашиваем ту же сущность не реально, так как мы знаем только мыло, а в карте соответствия сущности хранятся по айди.
Получается что запрос к БД нам таки нужно делать, чтоб получить данные в виде массива вместе с айди, а потом уже перед мапингом этих данных на сущность проверить карту соответствия и если там такой объект уже есть, то вернуть его, а не мапить по новой.
Так то да, сложного ничего нет.
Я просто думал что это можно всё как-то разруливать до запроса.
# Delphinum (03.12.2016 / 12:56)
AlkatraZ, верно, на борту у доктрины есть много полезных инструментов. Да вообще в процессе разрешения зависимости доктрины ставится чуть ли не половина пакагиста ))
Не сказал бы...
Она ставит 3 своих пакета, ну и кажется (уже не помню) YML от Симфонии и все.
Остальное скорее всего для DEV режима.
# L!MP (03.12.2016 / 12:57)
Ну так смотри. Мы запрашиваем сущность по айди, сохраняем её в карте соответствия, затем выполняем запрос на получение той же сущности, но по другому критерию, на пример мылу.
На этапе формирования
Повторюсь, IM нужен не для уменьшения запросов в БД, а для устранения проблем, связанных с наличием в системе двух объектов, описывающих одну и ту же сущность. Как то так:
$objA = new Obj;
$objA->setId(1);
$objB = new Obj;
$objB->setId(1);
По сути $objA и $objB это один и тот же объект, но работать в системе с ними можно как с разными объектами:
$objA->setName('foo');
$objB->setName('bar');
Таким образом появляется конфликт данных. Что будет записано в базу? Зависит только от того, какой объект будет сохранен последним. Такого быть не должно.
Эту проблему и решает IM, но на деле за этим не сложно следить и самому программисту.
Реализация простая, поиск по id выполняется по IM, а по всему остальному сразу обращение в базу, а результат уже в цикле перебирается и по id заменяется из IM.
Глядя на все эти ORM мне иногда кажется что проще самому реализовать простенький дата маппер с простыми запросами на sql и мапингом на простые POPO сущности, а всю эту абстракцию решить на уровне репозиториев.
Правда несколько сложно постоянно решать проблемы n*1 запросов. Ну и кода писать придётся больше, особенно если сравнивать со всякими active record библиотеками.