2009-03-25 3 views
0

У меня есть пользовательский элемент управления, при загрузке которого у меня есть некоторые данные из базы данных. Пользователь может манипулировать данными по-разному (CRUD). Процесс манипулирования данными может вызывать события на стороне сервера или на стороне клиента. Затем на странице есть кнопка сохранения, которая в конечном итоге обрабатывает временные данные и записывает их в базу данных.Элегантный способ реализовать манипулирование временным хранилищем - ASP.NET

Я ищу элегантный подход к этому. Мое мышление:

  • При загрузке использовать скрытую переменную и сериализации данных (в этой точке в виде заказного структура данных) в формате JSON
  • На любое событие (на стороне сервера/стороне клиента), который манипулирует данные, Deserialize, выполнить операцию и serialze назад к скрытым переменным
  • на финале сохранить, десериализации в структуру данных, что он был первым загруженным, как и попал в базу данных

поскольку все это происходит в ASCX. CS, я не могу действительно использовать классный материал ООП (для полиморфизма, если в в будущем они решат, что эти операции не должны выполняться в временном хранилище, а скорее в базе данных)

Я довольно сильно зацикливаюсь на подходе класса, имеющего кучу статических методов, который имеет один метод для каждой из этих операций. В коде позади, мне придется сериализовать/deserialze данные как и когда есть события, которые нужно обрабатывать.

EDIT-Любая помощь?

ответ

0

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

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

Например.

1) Пользователь A загружает страницу и начинает вносить изменения 2) Пользователь B загружает страницу и начинает вносить изменения 3) Пользователь A нажимает save. Изменения сохраняются в базе данных 4) Пользовательские кнопки B сохраняют. Изменения сохраняются в базе данных, переписывая изменения пользователя A.

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

1

ADO.Net. В структуре данных памяти, которую вы должны были бы зафиксировать только в конце процесса.

+0

По структуре ADO.NET, я предполагаю, что вы имеете в виду набор данных. Поскольку эти операции могут выполняться на стороне клиента или на стороне сервера, мне все равно придется использовать тот же подход, что и сохранение DS в объекте Viewstate. – DotnetDude

+0

Выберите одно местоположение. Не клиент и сервер. Вы должны отправить информацию на сервер, обновить модель на сервере, а затем вернуть измененную локальную переменную из этого вызова и сохранить ее. Таким образом, вы поддерживаете только одну кодовую базу для манипуляций с данными. –

Смежные вопросы