Я работал над проектом CMS (с использованием Zend Framework), чтобы освежить свои навыки и наткнуться на стену.Я решил на раннем этапе принять шаблон отображения данных (http://martinfowler.com/eaaCatalog/dataMapper.html) при обработке взаимодействия с базой данных благодаря хорошему разделению в логике между бизнес-моделью и базовым хранилищем.
Пример того, почему я хочу это разделениев том, что свойства объекта домена не обязательно будут иметь то же имя, что и базовый столбец базы данных (т. е. существует схема именования первичных ключей и внешних ключей, помогающая в автоматических вставках и отложенной загрузке).
Я адаптировал учебники, следуя &однако, основываясь на alivethedeepend.com, все примеры реализации / примера / учебника, которые я видел, полностью игнорируют способы обработки поиска, когда объекты не извлекаются по идентификатору. Я проверял учебники на нескольких языках, чтобы попытаться получить подсказку, нокажется, что все они обрабатывают только вставку, обновление по идентификатору, удаление по идентификатору и выбор по идентификатору!
Итак, у меня есть несколько вопросов, первый из которых заключается в том, как вы будете выполнять поиск на неосновныхключевые поля? Это обычный способ созданияконкретный метод для требуемого поиска, т.е. '$ entity-> findByName (' Bob ');'.Это кажется ужасно жестким и громоздким в долгосрочной перспективе.
А как насчет поиска свойств объекта, который имеет другое имя в базе данных?Я думал о том, чтобы иметь универсальный метод выбора, который принимает 3 аргумента (имя свойства объекта, модификатор для встраивания в предложении where, например '=' или '>' и значение для сопоставления).Но я не думаю, что это соответствует идее довольно жесткой структуры шаблона отображения данных.
Кто-нибудь может посоветовать, как лучше поступить?Кто-нибудь сталкивался с этим, и если да, то как ты с этим справился?
Я знаю, что такие проекты, как Doctrine, существуют, чтобы справиться с этим, однако я бы предпочел разработать «собственное» решение в настоящее время.