ASP Page Data Binding

Содержание

Слайд 2

ASP Page Data Binding

Data Binding – механизм для связывания данных с элементами

ASP Page Data Binding Data Binding – механизм для связывания данных с
управления, которые эти данные отображают.
Элементами управления пользовательским интерфейсом являются все классы, унаследованные непосредственно от класса System.Web.UI.Control или от его потомков.
В MSDN все эти классы имеют примерно такое описание для метода DataBind:

Слайд 3

ASP Page Data Binding

Иерархия наследников класса System.Web.UI.Control

Все производные классы (за исключением классов,

ASP Page Data Binding Иерархия наследников класса System.Web.UI.Control Все производные классы (за
помеченных *) наследуют реализацию метода DataBind определенную в базовом классе без изменений:

* - метод DataBind() переопределен

Слайд 4

ASP Page Data Binding

Repeater, BaseDataList (родитель для классов DataGird и DatList) В

ASP Page Data Binding Repeater, BaseDataList (родитель для классов DataGird и DatList)
этих классах DataBind переопределен следующим образом:

Слайд 5

ASP Page Data Binding

Как мы видим, ВСЕ наследники System.Web.UI.Control связываются с данными

ASP Page Data Binding Как мы видим, ВСЕ наследники System.Web.UI.Control связываются с
по единой схеме – вызов DataBind для родителя будет означать также вызов этого метода для ВСЕХ дочерних контролов. Эту схему удобно использовать для управления данными в жизненном цикле страниц и контролов:

Слайд 6

ASP Page Data Binding

Поскольку мы знаем, что вызов DataBind() для страницы, повлечет

ASP Page Data Binding Поскольку мы знаем, что вызов DataBind() для страницы,
за собой вызовы DataBind() для всех дочерних контролов (как «обычных», так и реализованных нами), мы может сосредоточить основную логику работы всех страниц приложения в базовом классе.
Это позволит не тратить массу усилий и времени на то, чтобы разобраться, что делает очередной метод «bindMyControlIfAllOk(true)» и как расставить if-ы, чтобы заставить «этого монстра» работать. ☺ ☺ ☺
Достаточно определить в базовом классе набор удобных виртуальных методов и последовательность их возовов. А затем переопределять их в классах страниц.

Слайд 7

ASP Page Data Binding

Например можно реализовать базовый класс следующим образом:

ASP Page Data Binding Например можно реализовать базовый класс следующим образом:

Слайд 8

ASP Page Data Binding

ВСЕ ЗДОРОВО И СРАЗУ?..

ТАКОГО НЕ БЫВАЕТ!!! ☺

ASP Page Data Binding ВСЕ ЗДОРОВО И СРАЗУ?.. ТАКОГО НЕ БЫВАЕТ!!! ☺

Слайд 9

ASP Page Data Binding

И если в Белорибо еще bindMyControlIfAllOk(), то в Белобаджо

ASP Page Data Binding И если в Белорибо еще bindMyControlIfAllOk(), то в
уже - DataBind()!

Или как мигрировать с наименьшими потерями?

Переход должен происходить от «листьев» к «корню» (от контролов к странице). При этом важно помнить о том, когда можно «безопасно» обрабатывать данные:

Слайд 10

ASP Page Data Binding

И если в Белорибо еще bindMyControlIfAllOk(), то в Белобаджо

ASP Page Data Binding И если в Белорибо еще bindMyControlIfAllOk(), то в
уже - DataBind()!

Или как мигрировать с наименьшими потерями?

Переопределив DataBind важно не забыть вызвать base. DataBind, а также обеспечить чтобы к моменту его вызова все необходимые данные были переданы в контрол сверху и обработаны по ссылке.

Слайд 11

ASP Page Data Binding

И если в Белорибо еще bindMyControlIfAllOk(), то в Белобаджо

ASP Page Data Binding И если в Белорибо еще bindMyControlIfAllOk(), то в
уже - DataBind()!

Или как мигрировать с наименьшими потерями?

Переопределив DataBind важно не забыть вызвать base. DataBind, а также обеспечить, чтобы его вызов осуществлялся после отработчиков событий (как правило в PreRender- е).

Слайд 12

ASP Page Data Binding

И если в Белорибо еще bindMyControlIfAllOk(), то в Белобаджо

ASP Page Data Binding И если в Белорибо еще bindMyControlIfAllOk(), то в
уже - DataBind()!

Или как мигрировать с наименьшими потерями?

Когда страница и все контролы переведены на «новую» схему Binding-a, количество вызовов DataBind-а равно 1-му (в PreRender-е) или 2-м (при первой загрузке в PageLoad-e и в PreRender-е)

Слайд 13

ASP Page Data Binding

И если в Белорибо еще bindMyControlIfAllOk(), то в Белобаджо

ASP Page Data Binding И если в Белорибо еще bindMyControlIfAllOk(), то в
уже - DataBind()!

Или как мигрировать с наименьшими потерями?

Когда все страницы имеют схожую структуру, вынести вызовы DataBind в BasePage класс займет 1 день работы одной пары.
Поскольку рассматриваемый подход естественным образом приводит к тому, что установка данных в контролы выделяется в отдельный метод, также около 1 дня потребуется чтобы определить в базовом классе необходимые виртуальные методы (SetDataSource и т.п.) и использовать их в дочерних классах.

Слайд 14

ASP Page Data Binding

И если в Белорибо еще bindMyControlIfAllOk(), то в Белобаджо

ASP Page Data Binding И если в Белорибо еще bindMyControlIfAllOk(), то в
уже - DataBind()!

Или как мигрировать с наименьшими потерями?

Ура! Мы в Белобаджо!!! ☺

Слайд 15

ASP Page Data Binding and Validation

Использование стандартной схемы для связывания данных:
облегчает написание

ASP Page Data Binding and Validation Использование стандартной схемы для связывания данных:
кода страниц и контролов с нуля
СИЛЬНО облегчает модификацию уже имеющегося GUI кода
позволяет вынести большую часть общей логики в базовые классы
«очищает» GUI код от многочисленных и часто избыточных вызовов методов типа «bindMyControlIfAllOk()»
облегчает чтение и понимание GUI кода
позволяет четко разделить такие блоки как, например, валидация, установка DataSource-ов, разграничение прав доступа и т.п.
значительно упрощает рефакторинг
Имя файла: ASP-Page-Data-Binding.pptx
Количество просмотров: 1617
Количество скачиваний: 2