Поддержка сайта

Высокие позиции в поисковой системе, на прямую зависят от развития вашего сайта.

Продвижение сайтов

Эффективность стратегий продвижения подтверждается сотрудничеством с крупными клиентами и отзывами о нашей работе.

Создание сайтов

Мы делаем сайты быстро, недорого и профессионально. От работы с нами, у вас останутся только положительные эмоции.

Добавление и вывод подробных сведений о товаре

Как только посетитель найдет что-нибудь интересное, он попытается углубиться в сайт для получения дополнительных сведений. На этот случай необходимо предусмотреть вывод дополнительных атрибутов. Поэтому нужно расширить объектную модель (добавить несколько объектов) и модифицировать код уровня представления.

Объект Product и представление подробных сведений

До сих пор объектная модель WroxCommerce была не более чем механизмом запуска заранее запрограммированных запросов. Она содержала только три отдельных объекта.

В традиционной объектной модели существует определенный уровень "плодотворности" (richness), т. е. запуск метода или запрос свойства может приводить к возврату другого объекта, выполняющего некоторое действие. На данном этапе нам необходимо создать объект Product, возвращающий список своих атрибутов, добавляющий себя в покупательскую корзину и т. д.

Одиночный объект Product представляет одну строку таблицы Products или (с иной точки зрения) один элемент каталога сайта. Мы не будем формировать этот объект через Server .CreateObject или что-то подобное, а запросим правильно сконфигурированный объект, воспользовавшись методом объекта Catalog. В контексте объектной модели такие объекты называются "объектами данных" (Data).

Создание объекта Product

1. Откройте проект WroxCommerce, создайте новый модуль класса, назовите его Product и введите в него код:

 Добавление и вывод подробных сведений о товаре

2. Проверим, можно ли создать эти объекты. Откройте объект Catalog и добавьте в него метод GetProductObject:

 Добавление и вывод подробных сведений о товаре

3. Вернитесь в объект Product и добавьте в него метод, возвращающий общие атрибуты. Сначала объявите свойство ID (идентификатор):

 Добавление и вывод подробных сведений о товаре

4. Затем добавьте в объект Product метод загрузки информации, которая не формируется автоматически во время создания объекта:

 Добавление и вывод подробных сведений о товаре

5. Создайте другие свойства, добавив в Product:

 Добавление и вывод подробных сведений о товаре

Добавление и вывод подробных сведений о товаре

 

6. Свойством Description нужно управлять иначе: если объект не имеет описания, следует пользоваться значением Details. Добавьте в Product:

 Добавление и вывод подробных сведений о товаре

Описание работы

Теперь мы можем сказать, что все объекты имеют метод Configure, позволяющий другим объектам модели ссылаться на объект Visit, службы базы данных и любые другие элементы, которые могут потребоваться интерфейсу iutility. Кроме того, мы хотим использовать метод Configure для указания объекту Product, какую из строк таблицы Products нужно представить, поэтому:

 Добавление и вывод подробных сведений о товаре

Добавление и вывод подробных сведений о товаре

 

Дополнительно в класс добавляется группа закрытых переменных (private member variables). В объектной модели Product представляет единичный экземпляр товара. Предположим, что мы работаем с объектом товара Gaggia Coffee Classic и хотим получить его цену. В первый раз запрашиваются все атрибуты объекта, и объект заполняется переменными, хранящими сведения из базы данных. Однако переменная mlD устанавливается в значение, получаемое через параметр ID:

 Добавление и вывод подробных сведений о товаре

Благодаря этому разработчик страницы ASP сможет создать экземпляр объекта Product следующим способом:

 Добавление и вывод подробных сведений о товаре

Код метода GetProductObject объекта Catalog выполняется при первом создании экземпляра объекта Product. В этот момент объект не имеет доступа к базе данных или к другим объектам модели, поскольку еще не установлена закрытая переменная m_utility. Следовательно, после создания объекта мы вызываем его метод Configure, передавая в ссылке на объект Catalog собственную переменную m_utility и идентификатор товара, который запрашивается через параметр ID:

 Добавление и вывод подробных сведений о товаре

При обсуждении принципов построения распределенных приложений говорилось о том, что следует создавать элементы непосредственно перед их использованием и удалять по завершении работы с ними. Именно поэтому в методе Configure объекта Product мы не открываем запрос и не собираем никаких данных из таблицы Products. Вместо этого, мы храним идентификатор и используем его при необходимости для получения новых сведений. Поэтому свойство ID сравнительно просто, а остальные свойства пользуются методом CheckLoad.

Метод CheckLoad ответственен за своевременную загрузку свойств объекта. Когда I разработчик запрашивает свойство Name, сначала вызывается метод CheckLoad (который устанавливает значения mName, mMfrName и других закрытых переменных), а затем возвращается значение соответствующей закрытой переменной. Эти операции должны выполняться лишь при необходимости, что улучшит масштабируемость системы. Вместо перетаскивания всей информации из базы данных при создании объекта, запрос откладывается до времени, когда эта информация действительно потребуется. Такой подход иск- ‘. лючает ненужные запросы (например, когда объект создается, но затем удаляется без обращения к атрибутам) и сокращает время хранения данных в памяти (на несколько миллисекунд от создания объекта до первого вызова его атрибутов).

Обсудим работу метода CheckLoad. Сначала проверяется, вызывался ли этот метод ранее. Если да, то ничего делать не нужно, и мы выходим из функции.

Если метод еще не вызывался, запускаем метод GetProduct объекта Catalog, возвращающий набор записей интересующего нас элемента. Обратите внимание, как используется закрытая переменная mlD, которая устанавливается во время вызова Configure:

Затем все данные извлекаются из строки и запоминаются в группе переменных. После закрытия набора записей mlsLoaded получает значение True, поэтому при следующем вызове CheckLoad мы выйдем из метода без запроса к базе данных:

 Добавление и вывод подробных сведений о товаре

В CheckLoad мы не возвращаем значение Description, поскольку пришлось бы перекачивать слишком много данных. Вместо этого, запускается отдельный запрос для получения описания товара. Для остальных добавляемых свойств (чтобы не нагонять скуку, мы создали лишь несколько возвращаемых свойств) используется CheckLoad. Например, для Name:

 Добавление и вывод подробных сведений о товаре

Если для объекта не было установлено значение свойства Description, используется Details. Мы производим отдельный запрос к базе данных, чтобы получить описание, когда оно действительно требуется. Описание может быть очень большим, а мы не хотим занимать память, если нужны только цена, производитель и другие основные сведения об объекте.

Флаг (в нашем случае — m_DescriptionLoaded) проверяется для выяснения, вызывалась ли функция ранее. Если вызова еще не было, исполняется запрос на извлечение нужных значений, а если вызов уже был, осуществляется выход из функции. В обоих случаях возвращается значение, хранящееся в mDescription.

 Добавление и вывод подробных сведений о товаре

Создание страницы detail.asp

1. Откройте в Visual InterDev проект JoCoffee и создайте новую страницу ASP с именем detail.asp. Скопируйте в нее код из template.asp.

2. Как и в dept. asp, когда посетитель запрашивает страницу, нужно передать через ID идентификатор товара, поэтому добавьте в detail.asp:

 Добавление и вывод подробных сведений о товаре

В этом маленьком фрагменте создается экземпляр заинтересовавшего посетителя объекта Product, а затем выполняется очистка. Посмотрите, как используется объект Request страницы ASP для передачи требуемого значения ID через любой из пяти запрашиваемых наборов. Обычно нужное значение содержится в наборе QueryString.

3. Добавьте на страницу код:

 Добавление и вывод подробных сведений о товаре

Добавление и вывод подробных сведений о товаре

 

В приведенном примере методом GetProductObject извлекается объект Product, на который мы ссылаемся по идентификатору, указанному в переменной строки запроса (id). Затем создается простая таблица HTML, и используются свойства Mf rName и Name объекта "товар" для записи в браузер полного имени. Поскольку Mf rName вызывается первым, в этот момент 3anycKaeTCjjj2necklioad и из базы данных загружаются все характеристики объекта, за исключением описания. Следовательно, при вызове Name имя товара уже записано в закрытую переменную, откуда оно и извлекается. Затем проверяется, существует ли изображение товара, и выводятся описание, цена и кнопка Buy It!.

4. Проверьте работу созданного кода (не забыв запустить в VB проект WroxCommerce). Просмотрите характеристики кофеварки Gaggia Carezza. То, что должно появиться на экране, показано на рисунке далее.

Пока не так много отличий от dept. asp, но сейчас мы перейдем кформированию динамических атрибутов.

 Добавление и вывод подробных сведений о товаре

 

Читайте так же:
Not found

Нам доверяют

Интернет магазин