(ASP.NET) ASP.NET (2006 год)

Бизнес-объекты на базе типизированных спецколлекций

Здесь будет описано создание бизнес-объекта на базе типизированных спецколлекций. Типичный пример такого бизнес-обьекта - корзина электронного магазина. Как правило, внутри бизнес-обьекта есть DataSet, который заполняется каким-то образом с локальной машины, или через Веб-сервис. В данном случае DataSet хранит детальную информацию о товаре.

Такой метод изготовления бизнес-объектов, позволяет НАПРЯМУЮ выводить их в GridView и даже в режиме прямого редактирования. Высокоуровневый интерфейс GridView позволяет реализовать даже редактирование всего в несколько строк. Утилизация всех бизнес обьектов, созданных во всех сеансах пользователей на ходу может быть произведена в Application, однако конечно весь смысл заключается в сохранении корзины в SQL с ключом профиля пользователя. Техники сохранения зависят от принятого метода аутентификации.

Пример кода бизнес-обьекта (ДатаСет заполняется с локальной машины).


Теперь посмотрим конкретный пример странички выбора товара на базе вышеописанного бизнес-обьекта. Обратите внимание, что весь магазин в этом случае выглядит всего из нескольких строчек.

Сделаем этот пример не на GridView как было выше, а на DataList. Шаблон элемента DataList создается буквально в два клика мышкой и будет в данном случае состоять из кнопки и контрола, который умеет в виде дерева выводить свойства товара.

Теперь собственно код, состоящий всего из несокольких строчек, но который наглядно демонстрирует преимущества собственного бизнес-объекта:

00001: 
00002: Partial Class _Default
00003:     Inherits System.Web.UI.Page
00004: 
00005:     Dim WithEvents WorkNodes As New SH.WorkingTovarList
00006: 
00007:     Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
00008:         If Not (Session("WorkNodes") Is Nothing) Then WorkNodes = Session("WorkNodes")
00009:     End Sub
00010: 
00011:     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
00012:         If Not Me.IsPostBack Then
00013:             DataList1.DataSource = WorkNodes
00014:             DataList1.DataBind()
00015:             'заполним данными все элементы коллекций
00016:             For Each Y As SH.WorkingTovar In WorkNodes
00017:                 If Not Y.IsHaveData Then Y.ReadFromSQL()
00018:             Next
00019:         Else
00020:             For Each Y As SH.WorkingTovar In WorkNodes
00021:                 If Request.QueryString("i") = Y.TovarValue Then Y.chTovarKorsina = True
00022:             Next
00023:         End If
00024:     End Sub
00025: 
00026:     Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound
00027:             'сначала находим внутри шаблона нужный контрол
00028:             For Each X As System.Web.UI.Control In e.Item.Controls
00029:                 If X.GetType.Name = "control_tovardetails_ascx" Then
00030:                     'теперь собственно выполняем привязку вручную
00031:                     CType(X, ASP.control_tovardetails_ascx).OneTovar = CType(e.Item.DataItem, SH.WorkingTovar)
00032:                 End If
00033:                 If X.GetType.Name = "ImageButton" Then
00034:                     CType(X, ImageButton).PostBackUrl = Me.AppRelativeVirtualPath & "?i=" & CType(e.Item.DataItem, SH.WorkingTovar).TovarValue
00035:                 End If
00036:             Next
00037:     End Sub
00038: 
00039: End Class

Как видите, здесь приходится выполнять ручную привязку DataListItem. Этот простейший код всего из нескольких строчек обеспечивает вот такую функциональность:





А зайдя на страничку обзора корзины (которая была описана в первых строчках) - которая даже кода конкретно не содержит, ибо GridView была как вы видите, привязана декларативно в Дизайн-тайме, мы получаем следующую картинку (разумеется щелкнув на кнопках с корзиной):



Мда... Налицо действително триумф микрософтовских технологий (хоть и крайне тяжеловесных). Но все это было сделано буквально минут за пять, причем с отличным IntelliSense-сервисом:



Заметьте, что здесь не поднимался вопрос, каким образом был заполнен Session("WorkNodes") при входе на эту страничку - это можно делать либо по предварительно записанным Cookie (если клиент уже посещал этот магазин, либо по списку приоритетов для продаже, либо даже подключив систему отбора похожего товара от того, каким интересовался посетитель при прошлых посещениях (как например сделано на Амазоне) - это предмет уже другого обсуждения, не связанного с удобством использования собственных бизнес-объектов, рассмотренного на этой страничке.



Comments ( )
Link to this page: //www.vb-net.com/asp2/2/index.htm
< THANKS ME>