Чтобы лучше, понять все это, рассмотрим, что случится, если два пользователя попытаются зафиксировать разные обновления записи о сотруднике, используя такой метод, как UpdateEmployee(), реализующий подход "последний выигрывает". Первый пользователь обновляет почтовый адрес. Второй пользователь обновляет имя сотрудника и в то же время нечаянно применяет старый почтовый адрес. Проблема в том, что метод UpdateEmployee() никак не сможет узнать, какие изменения вы фиксируете. Это значит, что он вытолкнет весь блок значений, находящийся в памяти, обратно в источник данных, даже если старые значения не изменялись (при этом отменив чьи-то изменения).

Если у вас большая, сложная запись, и вы хотите поддерживать различные типы редактирования, то простейший путь решения подобной проблемы состоит в создании более узконаправленных методов. Вместо создания обобщенного метода UpdateEmployee() используйте более узконаправленные методы вроде UpdateEmployeeAddress() или ChangeEmployeeStatus(). Эти методы могут выполнять более ограниченные операторы UPDATE без риска повторного применения старых значений.

Тестирование компонента

Теперь, когда вы создали компонент данных, понадобится простая тестовая страница, чтобы испытать его. Как и с любым другим компонентом, следует начать с добавления ссылки на сборку компонента. Затем вы сможете импортировать пространство имен, чтобы облегчить использование классов EmplayeeData и EmployeeDB. Единственное, что останется — написать код, взаимодействующий с классами. В данном примере этот код помещен в обработчик события Page.Load.

Во-первых, код извлекает и выводит количество и список сотрудников, используя приватный метод WriteEmployeesList(), передающий детали в HTML. Далее код добавляет запись и снова выводит содержимое таблицы. И, наконец, удаляет добавленную запись и снова показывает содержимое таблицы Employees.

Ниже показан полный код страницы:

public partial class ComponentTest : System.Web.UI.Page
{
  // Создать компонент базы данных, чтобы он был доступен
  // в пределах всей страницы.
  private EmployeeDB db = new EmployeeDB();

предыдущая    следующая страница   оглавление

347

Hosted by uCoz