Nicki
Новичок
Придется выносить объект комментариев из объекта или есть решение?
Подскажите пожалуйста как быть, буду очень благодарен. Сейчас пишу движек для магазина. Магазин имеет особенность в том, что у нескольких товаров совпадает часть данных: название, описание, производитель, а отличия между ними в объеме и соответственно цене. Чтоб было нагляднее можно посмотреть страницу http://oui.ru/good.php?vendor_id=166 - на этот сайт мне сказали ориентироватся. Модель получилась такой:
т.е. объект группы товаров, который описывает модель общих для всех товаров данных, содержит и двасвойства в которых записываются объекты-коллекции (массив я не стал использовать в данном случае).
Чтобы ускорить генерацию страницы и снизить нагрузку на БД стал прикручивать кэш, но вознакла ситуация, и как быть не знаю, т.к. опыта мало у меня. Чтобы уменьшить временные затраты решил создавать как можно меньше объектов. В итоге получился такой алгоритм: после выборки данных из БД необходимой группы (или групп) проверяю, есть ли готовый html для вывода данной группы или нет. Если есть, то не создаются объекты этих групп, а так же, соответственно и объекты товаров в них, комментариев, производителя и т.д. При этом в коллекцию добавляется не объект, а просто id группы:
Дальше коллекция попадает в шаблонизатор итам происходит такая вот проверка:
Проблема в том, что html код генерируется без вывода списка комментариев к товарам и если юзер откроет страницу с комментариями (как по ссылке выше), то скрипт, найдя готовый html для вывода группы, добавит в коллекцию не объект группы, а только ее id, и при добавлении объекта коллекции комментариев в дальнейшем произойдет ошибка, т.к. объекта группы нет в коллекции объектов...
Как быть? Сейчас у меня для получения списка товаров и комментариев в группе используются методы (единообразный стиль):
А теперь не знаю как быть с коллекцией комментариев для тех групп, html которых уже существует, но без комментариев. Генерировать html сразу с комментариями не вариант - они нужны только если просматривается не список групп товаров, а какая то одна группа. И делать два варианта тоже не хочу (с комментариями и без), т.к. если комментов много нужен постраничный вывод... короче не вариант. У меня пока одна мысль - вынести объект коллекции комментпариев совсем из группы, и работать с комментариями отдельно от групп. Но... очень этого не хочется...
Подскажите пожалуйста как быть. Может совсем изменить как то реализацию отношений между объектами, или еще что...
Пожалуйста не пинайте сильно, т.к. опыта мало пока при работе с объектами.
Подскажите пожалуйста как быть, буду очень благодарен. Сейчас пишу движек для магазина. Магазин имеет особенность в том, что у нескольких товаров совпадает часть данных: название, описание, производитель, а отличия между ними в объеме и соответственно цене. Чтоб было нагляднее можно посмотреть страницу http://oui.ru/good.php?vendor_id=166 - на этот сайт мне сказали ориентироватся. Модель получилась такой:
PHP:
class Group
{
... другие общие свойства всех Commodities
protected $Commodities = null; // объект коллекции товаров
protected $Commentaries = null; // объект коллекции отзывов о товаре
}
Чтобы ускорить генерацию страницы и снизить нагрузку на БД стал прикручивать кэш, но вознакла ситуация, и как быть не знаю, т.к. опыта мало у меня. Чтобы уменьшить временные затраты решил создавать как можно меньше объектов. В итоге получился такой алгоритм: после выборки данных из БД необходимой группы (или групп) проверяю, есть ли готовый html для вывода данной группы или нет. Если есть, то не создаются объекты этих групп, а так же, соответственно и объекты товаров в них, комментариев, производителя и т.д. При этом в коллекцию добавляется не объект, а просто id группы:
PHP:
// создаем объект коллекцию для списка групп. Этот объект потом передается в шаблонизатор
// для вывода списка товарных групп.
$Groups = new List_Iterator;
// я использую ADODB. $result - это объект ADORecordSet
if (0 != $result->RecordCount())
{
while ($data = $result->FetchRow())
{
// если есть в кэше готоый html
if ($this->Cache->hasCaching('groups', $data['groupId'], 'html_for_admin'))
// добавляем в коллекцию только id группы, а не объект группы
$Groups->append($data['groupId'], $data['groupId']);
// html кода нет - значит создаем объекты добавляя их в коллекцию
else {
if ($Group = $this->createObjectGroup($data))
$Groups->append($Group);
}
}
}
return $Objects;
PHP:
// создание html кода для вывода групп
while ($Group = $Groups->getNext())
$groupsHtml[] = _getHtml($Group);
function _getHtml($Group)
{
$Cache = Core::getCache();
// берем данные из кэша
$groupId = (is_object($Group)? $Group->getId():$Group);
if (false !== ($data = $Cache->get('groups', $groupId, 'html_for_admin')))
return $data;
// генерация html
$out = '... ...';
// сохранение в кэше и возврат
$Cache->save($out, 'groups', $groupId, 'html_for_admin');
return $out;
}
Как быть? Сейчас у меня для получения списка товаров и комментариев в группе используются методы (единообразный стиль):
PHP:
// получаем объект коллекцию товаров в группе
$Commodities = $Group->getCommodities();
// получаем объект коллекцию комментариев к товарам в группе
$Commentaries = $Group->getCommentaries();
Подскажите пожалуйста как быть. Может совсем изменить как то реализацию отношений между объектами, или еще что...
Пожалуйста не пинайте сильно, т.к. опыта мало пока при работе с объектами.
