Доброе время. Такой вопрос. Если делать компонент для работы с разными базами данных, то необходимо в коде объекта, получаемого свои данные из БД НЕ писать сам запрос. Думаю это и так всем понятно. Но вот, я могу абстрагировать тип запроса(сел, дел, инс), набор обрабатываемых полей и имена таблиц. А вот с условиями выборки у меня возникают трудности. Как передать условие не описывая его явно. Например в Postgrey надо брать поля в двойные кавычки, а в MySQL в ` ` эти штуки. Никак не могу придумать как делать. Может кто знает как реализовать? Передавать строку без всего а потом выявлять в ней поля и обрамлять тоже маразм. Наверняка есть еще какието нюансы, кроме обрамления...
Sergey89 Спасибо, никак не мог найти эту ветку!!!! Mr.M.I.T. Думаю попробывать. Но не совсем именно так - думаю может получиться почти аспектно-ориентированное чтото... Идея такова: Есть класс SimpleObject. SimpleObject фактически соответствует строке таблицы БД У него есть такие свойства: 1 ставит в соответствие поле БД с исходным свойством объекта; 2 через __get и __set осуществляет доступ к этим свойствам; 3 имеет методы инициализации, добавления, сохранения и тд. 4 имеет механизмы взаимодействия с другими объектами этого уровня абстракции. Есть класс SimpleObjects SimpeObjects фактически соотвествует нескольким строкам БД У него есть такие свойства: Почти все теже что и у SimpleObject но с отложенной инициализацией и итераторным интерфейсом. Теперь мне просто надо создать такие объекты: MySQLSimpleObject, OraSimpleObject, IBaseSimpleObject и т.д. Теперь несколько слов о свойстве 4: Этот механизм предназначен для объединения объектов SimpleObject и SimpeObjects во всех направлениях, организуя связи один ко многим и т. п. Ведь без этого свойства если, например, взять класс User(SimpleObject) и UserRoles(SimpeObjects) то при показе всех пяти ролей пользователя(или шести, без разницы) выполняется куча запросов на получение данных. Но благодаря механизму 4, вся выборка происходит одним запросом с Left Join. Как вам идея, ребятки?
Ну вот когда сделаешь, тогда и посмотрим =). Я тоже начинал писать нечто подобное с поддержкой lazy load, bulk load, many to many, one to many, one to one relations. Но как обычно времени не хватает.