Репозиторий, сущность и поле-референс

artygrand

Создатель SyDES
Поскольку некоторые ноют, что ActiveRecord - антипаттерн, я решил для себя репозиторий замутить, который возвращает сущности, состоящие из полей.
Проблема в том, что я не могу понять, как можно организовать поле-референс или же связь (один ко многим, многие ко многим)

Если в AR в шаблоне все пишется довольно удобно
PHP:
$article->parent->title
то в сущности нету подключения к базе, и я из поля parent не могу добыть никаких данных, кроме id.
 

AnrDaemon

Продвинутый новичок
Через репозиторий, естественно. $repo->get($article->parent)->title
 

artygrand

Создатель SyDES
И в шаблон передавать переменные с массивами на каждый уровень вложенности, который может потребоваться?

Например, список статей с их категориями и авторами, а еще количеством комментариев и еще кучи возможного?
 

AnrDaemon

Продвинутый новичок
Нет, в шаблон передавать то, что шаблон должен отрендерить.
 

Redjik

Джедай-мастер
Поскольку некоторые ноют, что ActiveRecord - антипаттерн, я решил для себя репозиторий замутить, который возвращает сущности, состоящие из полей.
Проблема в том, что я не могу понять, как можно организовать поле-референс или же связь (один ко многим, многие ко многим)
Классическая проблема - значит не нужен тебе пока репозиторий.
Когда начнешь проектировать модели и выносить в них бизнес логику, тогда и начинай задумываться о том, как вынести все, что связано с persistance в репозиторий.
 

fixxxer

К.О.
Партнер клуба
@artygrand, ты отказался от AR, таким образом избавившись от завязки на базу данных, и теперь ноешь, что нет завязки на базу данных.

Если ты не представляешь себе, как проектировать программу так, чтобы доступ к базе не был нужен где попало - не выпендривайся и с̶л̶у̶ш̶а̶й̶ ̶в̶а̶л̶е̶н̶к̶и̶ используй AR. Реально, это будет меньшим из зол, чем костыли, которые ты так нагородишь.
 

artygrand

Создатель SyDES
А я то думал, что есть тайная технология, которая делает и "правильно" и удобно, которую я не нашел в книжках и которую знают все форумные знатоки, когда хают ar.
Значит придется еще искать.
 

fixxxer

К.О.
Партнер клуба
Технология есть, называется "головной мозг".

Если серьезно - если ты в книжках по DDD этого не нашел - ну не знаю, наверное, попробуй прочитать еще раз. Заодно поймешь, почему в твоем случае наверняка AR подходит даже лучше. Правильно бывает для конкретной задачи, серебряной пули нет.
 
Последнее редактирование:

Вурдалак

Продвинутый новичок
@artygrand Вот это употребление слова «репозиторий» вместо «DataMapper» случайность или подразумевается именно тот репозиторий, что встречается в разных источниках на тему DDD?

Скорее всего тебя интересует просто DataMapper, и ты можешь глянуть как это сделано в Doctrine. Там не id сущности, а специальный proxy-объект, при обращении к которому происходит запрос в базу, т.е. тот же коннект, только неявный.
 

artygrand

Создатель SyDES
@Вурдалак, похоже я запутался с этими слоями абстракции.
Репозиторий, который использует маппер, который делает объекты из данных, полученных из дбал
или репозиторий, который описан тут http://designpatternsphp.readthedocs.io/ru/latest/More/Repository/README.html ?
я второй использую

Доктрину гляну. Вроде бы то, что надо, только найти проблемно, что именно происходит внутри $this->__initializer__->__invoke()
 

fixxxer

К.О.
Партнер клуба
Покажи свою реализацию текущую. Как выглядит твой репозиторий?
 

artygrand

Создатель SyDES
@fixxxer, Не знаю, чем это может помочь, но вот. Там малость каша пока
https://gist.github.com/artygrand/1bbca0a8f091a17b4fcc18cd83cbda8b репо, сущность и тестовые контроллер с моделью
https://github.com/sydes/sydes/tree/master/system/modules/Fields/Plugin/Fields поля

Все это делается, что бы сделать удобный аналог блоков друпала/инфоблоков битрикса
 

AmdY

Пью пиво
Команда форума
Божественно. Забрал себе на память. Если ещё не придумали, назову этот антипаттерн - Active Entity
 

AmdY

Пью пиво
Команда форума
Просто используй AR, когда ваша версия EAV начнёт загибаться под нагрузкой и понадобится лучший поиск, вы прикрутите эластик или сфинкс, тогда поймёшь зачем нужный репозитории и чистые сущности. До этого лучше доходить через опыт и рефакторинг, а не наслушавшись школьников о модных технологиях. Я уже устал от этой попоболи на симфони проектах, как обезьяны повторяют мантру, добавив своего творчества, при этом абсолютно не понимая зачем это нужно и уродуя проекты до уровня "хужебитрикса".
 

artygrand

Создатель SyDES
@AmdY, $connection - это строка. Репозиторий берет подключение из Database с этим именем и у себя же оставляет.
К счастью, eav никогда не загнется при 10-500 элементах.

>на симфони проектах
А энтерпрайз разве еще не загнулся? Все же хотят красивые лендинги и бизнес-сайты.
 

AnrDaemon

Продвинутый новичок
Это не репо, это какое-то ВЦ…
Слишком твой репозиторий много знает о том, что БД вообще не касается.
 
Сверху