Ekstazi писал(а):Наверное вы не поняли суть топика. Если вы такой успешный программист, то покажите хотя бы один из ваших проектов в ООП стиле. Sam предложил реализовать более легкий класс на основе ActiveRecord патерна. Да и лучше всего про шаблоны проективание пишет Мартин Фаулер. Его и надо было советовать. Поэтому у меня возникли большие сомнения на счет вашего професионализма. Ну да не будем ругаться. Как профессионал лучше вылоэжите свои идеи по упрощению функционала класса CActiveRecord в yii или любой другой способ работы с БД.
Гыг. В следующий раз я непременно учту Ваши замечания, уважаемый, по поводу списка литературы. И непременно опубликую названия и авторов ВСЕХ книг (известных мне), касающихся темы обсуждения.
Показать проекты===показать исходный код. Увы, у меня пока нет проектов Open Source. Есть задумки, но до реализации не доходят руки. Как только сподоблюсь - обещаю, Вы первый получите уведомление. А от Ваших сомнений в моем опыте/профессионализме мне ни холодно, ни жарко.
А теперь по теме...
На вскидку... Основное время/ресурсы системы тратятся на создание массива объектов (которые и нужны-то не всегда) модели (методы PopulateRecord()/PopulateRecords(), если не ошибаюсь) на основе результатов выборки из БД. Создайте класс-контейнер, который:
1) будет содержать результаты запроса к БД "как есть", т.е. в виде массива;
2) должен знать тип класса AR, который хранит;
2.1) должен уметь создавать экземпляры объектов нужных классов "на лету" по требованию (класс нам известен);
3) может отдавать массив результатов (выбранных из БД) в виде массива в режиме read-only;
При таком подходе не теряется вся мощь AR (элементы массива преобразуются в экземпляры классов AR при желании и прозрачно) и не кушается много памяти/ресурсов, если нужно, например, отобразить список пользователей (просто пробегаемся по массиву без создания объектов AR). Можно спокойно отнаследоваться от CActiveRecord и перекрыть несколько методов особо не опасаясь изменений в коде CActiveRecord.
Такой подход я использую в своей библиотеке для MongoDb. Но, поскольку, MongoDb не реляционная БД, то там немного другая песня и свои заморочки.