GWT Синхронизируйте модель клиента и сервера - PullRequest
3 голосов
/ 11 декабря 2010

Когда пользователь заходит на сайт, на стороне клиента и сервера создается пустая корзина покупок. Когда он добавляет продукт в SC, выполняется вызов RPC для добавления продукта на стороне сервера. Нам нужно сделать ту же самую клиентскую сторону, чтобы синхронизировать и обновить интерфейс. Если мы этого не сделаем и перейдем к представлению, которое имеет ссылку на старый SC. Пользовательский интерфейс не будет обновляться соответствующим образом (пустой SC, тогда как в нем есть один продукт).

Раствор 1

Вызов RPC возвращает обновленный SC и делает clientSC = returnedSC. Это не очень эффективно, так как по сети передается много данных.

Решение 2

Вызов RPC возвращает добавленный продукт, а на клиентской стороне вызывает метод addProduct, который добавляет продукт в список, а не хранит его в хранилище данных (как на стороне сервера).

Решение 3

То же, что и в решении 2, но используется событие для уведомления докладчиков (я использую шаблон MVP), имеющих ссылку на SC.

Какой из них лучше, в целом, как лучше синхронизировать модель клиента и сервера?

1 Ответ

4 голосов
/ 20 декабря 2010

Используйте RequestFactory, который поставляется вместе с gwt 2.1.

http://code.google.com/webtoolkit/doc/latest/DevGuideRequestFactory.html

RequestFactory позволяет легко реализовать уровень доступа к данным как на клиенте, так и на сервере.Он позволяет вам структурировать код на стороне сервера ориентированным на данные способом и обеспечивает более высокий уровень абстракции, чем GWT-RPC, который ориентирован на обслуживание, а не на данные.На стороне клиента RequestFactory отслеживает объекты, которые были изменены, и отправляет только изменения на сервер, что приводит к очень легким нагрузкам сети .Кроме того, RequestFactory обеспечивает надежную основу для автоматического пакетирования и кэширования запросов в будущем.

RequestFactory использует свой собственный сервлет RequestFactoryServlet и реализует собственный протокол для обмена данными между клиентом и сервером.Он не предназначен для сервисов общего назначения, таких как GWT-RPC, а скорее для сервисов, ориентированных на данные, как мы скоро увидим.RequestFactory не использует GWT-RPC и не предназначен для его замены.Он разработан специально для реализации постоянного уровня как на клиенте, так и на сервере.

...