Элегантный способ реализовать манипулирование временным хранилищем - ASP.NET - PullRequest
0 голосов
/ 26 марта 2009

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

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

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

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

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

РЕДАКТИРОВАТЬ-Любая помощь?

Ответы [ 2 ]

1 голос
/ 26 марта 2009

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

0 голосов
/ 26 марта 2009

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

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

Например.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...