Мне нужен совет о том, как лучше всего обрабатывать передачу изменений сущностей на стороне сервера клиенту с помощью RequestFactory GWT.
Предположим, у нас есть два EntityProxy, PersonProxy и PersonListProxy (у которого есть геттер для списка). Предположим, что клиент получил PersonList и Person с сервера.
В случае, если клиент редактирует один из этих прокси-серверов и запускает запрос, механизм RequestFactory (если я правильно понял принципы) будет запускать событие EntityProxyChange, если он обнаружит изменения, сделанные кодом сервера (чтобы клиент мог обновить свой дисплей). сущностей, например).
Теперь предположим, что сервер изменяет свои объекты вне запроса этого клиента (например, из-за того, что другой клиент вызывает сервер), чтобы этот клиент увидел другую версию, если он снова получит Person или PersonList.
Мой вопрос заключается в том, как лучше всего внутри структуры RequestFactory сообщить клиенту об изменениях (и повторно использовать как можно больше механизмов)? Мы можем предположить, что у меня есть способ отправлять простые сообщения с сервера клиенту (например, API канала Google App Engine или события, отправленные сервером).
Одна из идей может заключаться в том, что сервер отправляет по этому каналу сообщение о том, что Person или PersonList с определенным идентификатором изменились. Затем клиентский код, обрабатывающий получение этих сообщений, может использовать RequestFactory для повторной выборки (например, поиска) объекта. Затем это изменение должно быть распространено на другие части клиента с помощью события EntityProxyChange.
Это путь? (И в случае, если у клиента уже есть текущая версия объекта, например, из-за того, что сервер был тупым и уведомил клиента об изменениях, внесенных самим клиентом, будет ли инициированная повторная выборка просто транспортировать несколько бит метаданных, а не весь опять сущность?)
ДОБАВЛЕН:
Немного подумав об этом, я задаюсь вопросом, как можно сгенерировать EntityProxyId для канала событий, отправленного сервером. Когда объект на сервере изменяется, сервер имеет только идентификатор сервера. Затем он, конечно, может отправить его клиенту, но клиент знает только EntityProxyId. Конечно, я мог бы добавить getId() (в дополнение к getStableId()) для каждого EntityProxy, но похоже, что это добавит избыточные данные к каждому ответу сервера.
edit()
на стороне клиента: отслеживать изменения, чтобы можно было сделать разницу) - person Thomas Broyer   schedule 29.03.2013find
всегда создает новый EntityProxy и не принимает во внимание уже существующие EntityProxy с правильным идентификатором и версией, верно? И что я должен быть осторожен, чтобы возвращать небольшие объекты в моих запросах, поскольку здесь не делается различий со знаниями клиента, верно? - person Marc   schedule 29.03.2013