Изменение представления объекта сервера без обновления клиента - PullRequest
2 голосов
/ 12 мая 2011

У нас есть распределенная система, в которой серверный кеш на основе Java взаимодействует с внешним интерфейсом C #, в настоящее время через сериализацию объектов.

Одна функция «приятно иметь», которую мы использовали дляХотя идея заключается в том, что когда изменяется представление объекта на сервере, то есть мы добавляем новый атрибут, нам также не нужно выпускать обновление для внешнего интерфейса.Прямо сейчас это явно не возможно - вы изменяете структуру объекта, вы изменяете его сериализованную форму, и десериализация не работает (или в лучшем случае захватывает только то, что используется для сбора, и никаких новых полей).

Мне было интересно, сталкивался ли кто-нибудь с подобной проблемой раньше, и какие решения они использовали для ее решения?Одна яркая искра в офисе предложила нам отправить XML клиенту, и он должен напрямую построить пользовательский интерфейс из того, что содержится в этом сообщении - без создания промежуточного объекта - но это, конечно, приносит свои собственные проблемы.

Все советы приветствуются:)

Приветствия,

Дейв.

Ответы [ 3 ]

2 голосов
/ 12 мая 2011

Я бы, наверное, взглянул на буферы протокола Google.Этот протокол поддерживает разные версии протокола на стороне клиента и сервера.

2 голосов
/ 12 мая 2011

вы можете определить «дополнительные поля» Map<String, Object> как одно из полей в объектах, для которых вы планируете обновления

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

1 голос
/ 12 мая 2011
  1. Используйте более гибкий формат сериализации.
  2. Не изменяйте существующие DTO, расширяйте их

Таким образом, сервер может отправлять расширенный DTO,в то время как клиент десериализует базовый DTO.

У многих платформ сериализации есть поля, помеченные как необязательные , которыми вы помечаете все новые поля.

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