Привет всем!
Решил начать писать нормальные модели для представления сущностей в проекте.
В моем понимании модель - это какая-то сущность, представляющая одну таблицу в бд.
Экземпляр класса этой модели, соответсвенно представляет конкретную строку таблицы.
Собственно стокнулся с проблемой инстанцирования моделей.
Предположим, что есть две сущности: тарифные планы и опции, из которых эти тарифные планы и состоят. пусть для простоты будет 2 таблицы: plans, options
Тогда есть 2 модели: Plan, Option.
Если придерживаться объектного подхода, то Объект класса Plan должен содержать в себе массив объектов класса Option из которых он состоит.
Но как такой объект инстанцировать?
Сейчас получается так (упрощенно):
PHP:
скопировать код в буфер обмена
Class Plan { // Небольшая частаная factory (можно вынести в отдельный класс PlanManager) public static getById($id) { // Формируем запрос в БД $sql = "SELECT .... FROM plans JOIN options ON (....) ...." $result = db::query($sql); // каким-то образом выгружаем из бд тариф и все его опции $Plan = new Plan($name, $cost, $....); // Cоздаем экземпляр модели while(options) { // проходим все вытаенные опции в цикле $Option = new Option($name, $type, $...); $Plan->addOption($Option); // Добавили в план опцию. } return $Plan; } // Методы класса protected $_options = array(); // массив для опций public function __construct($name, $cost, $....) { .... } public function getOptions() { return $this->_options; } // остальная логика } // Где-то в приложении $Plan = Plan::getById(10); $options = $Plan->getOptions(); // Вернет массив объектов, хранящихся внутри плана foreach($options as $Option) { $Option->..... ; // что-то делаем в цикле }
Вроде бы все хорошо.. однако если надо сделать инстансы более сложных объектов, то на каждый случай приходится писать тонны SQL и во так инстанцировать все вложенные объекты.
Может быть есть подходящие методики проектирования или способы упростить / сделать правильно подобные вещи?(Отредактировано автором: 04 Декабря, 2012 - 19:29:17)
|