Как работает управление версиями с удаленными объектами Flex и AMF? - PullRequest
1 голос
/ 24 сентября 2008

Предположим, я использую тег [RemoteClass], чтобы наделить пользовательский класс Flex интеллектуальными возможностями сериализации.

Что происходит, когда мне нужно изменить свой объект (добавить новое поле, удалить поле, переименовать поле и т. Д.)?

Есть ли шаблон дизайна для элегантной обработки?

Ответы [ 2 ]

3 голосов
/ 29 ноября 2008

Лучше всего сделать генерацию кода на основе ваших внутренних классов, чтобы сгенерировать для них аналоги ActionScript. Если вы сгенерируете базовый класс со всеми свойствами вашего объекта, а затем создаете для него подкласс, который никогда не изменяется, вы все равно можете добавить собственный код, в то же время восстанавливая только те части вашего класса, которые меняются. Пример:

java:
public class User {
  public Long id;
  public String firstName;
  public String lastName;
}

as3:
public class UserBase {
  public var id : Number;
  public var firstName : String;
  public var lastName : String;
}

[Bindable] [RemoteClass(...)]
public class User extends UserBase {
  public function getFullName() : String {
    return firstName + " " + lastName;
  }
}

Ознакомьтесь с проектом Granite Data Services для Java -> Генерация кода AS3.

http://www.graniteds.org

1 голос
/ 24 сентября 2008

Добавление или удаление вообще работает.

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

Изменение типов, работает не так хорошо и часто приводит к исключениям во время выполнения.

Мне нравится использовать явные объекты передачи данных, а не сохранять мою фактическую модель данных, которая используется во всем приложении. Тогда ваш перевод из DTO-> Model может учитывать различия версий.

...