Nicki
Новичок
Глубина объектной детализации и вопросы производительности.
Вопрос у меня скорее по теории программирования, чем о чем то конкретном. Дело в том, что я почти закончил работу над магазином, код которого я старался написать с применением ООП и MVC. Конечно архитектура получилась наверное не очень хорошая, наверное с большим количеством недочетов... но тем не менее это первый проект на ооп и мне очень понравилось так писать. Но, столкнулся с проблемой производительности. Добавил кеширование, причем пока не на уровне страницы, а на уровне отдельных ее элементов (отдельных товаров), причем сделал так, что если админ меняет к примеру цену товара, то из кеша убираются данные только этого товара и при следующем обращении к данным товара, данные будет новые. Вопрос у меня в том, насколько глубоко, насколько детально нужно прорабатывать объектную модель? Может есть какие то общие советы... буду очень признателен.
К примеру мой сайт lux-france.ru. Если взять какую либо одну запись о товаре, то с точки зрения ситемы это:
- класс контайнер, который может содержить следующие объекты: объект товарной группы, объект-множество товаров, которые объедены группой, объект-множество отзывов.
- объект товарной группы может содержать: объект производителя (lazyLoad), объект раздела каталога в который назначена товарная группа, + для косметики объект области применения (lazyLoad), а для парфюмерии объект Семейство запахов (lazyLoad). ну и несколько обычных свойств типа свойства с названием, описанием товара, картикой товара и т.д.
- объект Товар это простой объект. товары объедены в группы с общим описанием, названием, картинкой (т.е. тем что описывает предыдущий объект) и отличаются по вес/объем/цвет и соответственно ценой. таких объектов может быть много в группе, а может и один.
- объект Отзыв тоже простой объект, и как и объект Товар их можект быть много. отзывы загружаются в Контейнер только тогда, когда отображается страница с отзывами о товарах.
- объект Производитель один из простых объектов. содержит id и имя производителя.
- объект Раздел - еще один простой обект содержит id и имя раздела каталога.
- объект Семейство запахов тоже простой объект. содержит id и имя запаха.
- объект Область применения. содержит id и имя области применения (ну, для лица, для рук, для шеи и т.д.).
А алгоритм такой: делается выборка из базы для постраничного вывода товаров. далее результат выборки перебирается, при этом, если есть готовый html для отображения общих данных о товарах то объект Группы не создается (а значит не нужно создавать и объекты Раздел, Производитель, Семейство запахов, Область применения). Дальше из результата выборки берутся данные по товарам и как и в случае с товарной группой, если есть готовый html вывода списка товаров то ни один объект товара для данной группы не строится (т.к. html выводит сразу весь список товаров). В общем в результате объект Контейнера может совсем не содержать ниодного объекта, т.к. для всех сущностей есть готовый html. И так с каждым контейнером (а их выводится по 10 на страницу).
Чтобы еще увеличить производительность нужно видимо делть кэширование на уровне страницы в целом. Но меня сейчас очень интерисует именно глубина детализации объектов. Получается так, что для каждой сущности у меня есть Гейтвей (соответственно таблица), который возвращает объекты определенного типа, т.е. если есть таблица, значит у меня для нее есть Гейтвей, который работает с объектами определенного типа, которые в свою очередьь являются составной частью некоторого сложного объекта.
Не ругайте пожалуйста сильно - первый серьезный опыт в ооп и mvc (причем действительно пришлось генерить для одной модели несколько представлений). Посоветуйте как определить ту степень детализации которая необходима в проекте...
Вопрос у меня скорее по теории программирования, чем о чем то конкретном. Дело в том, что я почти закончил работу над магазином, код которого я старался написать с применением ООП и MVC. Конечно архитектура получилась наверное не очень хорошая, наверное с большим количеством недочетов... но тем не менее это первый проект на ооп и мне очень понравилось так писать. Но, столкнулся с проблемой производительности. Добавил кеширование, причем пока не на уровне страницы, а на уровне отдельных ее элементов (отдельных товаров), причем сделал так, что если админ меняет к примеру цену товара, то из кеша убираются данные только этого товара и при следующем обращении к данным товара, данные будет новые. Вопрос у меня в том, насколько глубоко, насколько детально нужно прорабатывать объектную модель? Может есть какие то общие советы... буду очень признателен.
К примеру мой сайт lux-france.ru. Если взять какую либо одну запись о товаре, то с точки зрения ситемы это:
- класс контайнер, который может содержить следующие объекты: объект товарной группы, объект-множество товаров, которые объедены группой, объект-множество отзывов.
- объект товарной группы может содержать: объект производителя (lazyLoad), объект раздела каталога в который назначена товарная группа, + для косметики объект области применения (lazyLoad), а для парфюмерии объект Семейство запахов (lazyLoad). ну и несколько обычных свойств типа свойства с названием, описанием товара, картикой товара и т.д.
- объект Товар это простой объект. товары объедены в группы с общим описанием, названием, картинкой (т.е. тем что описывает предыдущий объект) и отличаются по вес/объем/цвет и соответственно ценой. таких объектов может быть много в группе, а может и один.
- объект Отзыв тоже простой объект, и как и объект Товар их можект быть много. отзывы загружаются в Контейнер только тогда, когда отображается страница с отзывами о товарах.
- объект Производитель один из простых объектов. содержит id и имя производителя.
- объект Раздел - еще один простой обект содержит id и имя раздела каталога.
- объект Семейство запахов тоже простой объект. содержит id и имя запаха.
- объект Область применения. содержит id и имя области применения (ну, для лица, для рук, для шеи и т.д.).
А алгоритм такой: делается выборка из базы для постраничного вывода товаров. далее результат выборки перебирается, при этом, если есть готовый html для отображения общих данных о товарах то объект Группы не создается (а значит не нужно создавать и объекты Раздел, Производитель, Семейство запахов, Область применения). Дальше из результата выборки берутся данные по товарам и как и в случае с товарной группой, если есть готовый html вывода списка товаров то ни один объект товара для данной группы не строится (т.к. html выводит сразу весь список товаров). В общем в результате объект Контейнера может совсем не содержать ниодного объекта, т.к. для всех сущностей есть готовый html. И так с каждым контейнером (а их выводится по 10 на страницу).
Чтобы еще увеличить производительность нужно видимо делть кэширование на уровне страницы в целом. Но меня сейчас очень интерисует именно глубина детализации объектов. Получается так, что для каждой сущности у меня есть Гейтвей (соответственно таблица), который возвращает объекты определенного типа, т.е. если есть таблица, значит у меня для нее есть Гейтвей, который работает с объектами определенного типа, которые в свою очередьь являются составной частью некоторого сложного объекта.
Не ругайте пожалуйста сильно - первый серьезный опыт в ооп и mvc (причем действительно пришлось генерить для одной модели несколько представлений). Посоветуйте как определить ту степень детализации которая необходима в проекте...