Apache flex 版本控制如何使用Flex远程对象和AMF?

Apache flex 版本控制如何使用Flex远程对象和AMF?,apache-flex,class,version,amf,Apache Flex,Class,Version,Amf,假设我使用[RemoteClass]标记赋予自定义Flex类序列化智能 当我需要更改我的对象添加新字段、删除字段、重命名字段等时会发生什么情况 是否有一种设计模式可以优雅地处理此问题?添加或删除通常有效 您将在跟踪中收到关于属性丢失或找不到的运行时警告,但任何传输的数据都将仍然存在。开发时需要记住这一点,因为并非所有字段都有有效数据 更改类型,效果不太好,通常会导致运行时异常 我喜欢使用显式数据传输对象,而不是保留整个应用程序中使用的实际数据模型。然后,您从DTO->Model的翻译可以考虑版本

假设我使用[RemoteClass]标记赋予自定义Flex类序列化智能

当我需要更改我的对象添加新字段、删除字段、重命名字段等时会发生什么情况


是否有一种设计模式可以优雅地处理此问题?

添加或删除通常有效

您将在跟踪中收到关于属性丢失或找不到的运行时警告,但任何传输的数据都将仍然存在。开发时需要记住这一点,因为并非所有字段都有有效数据

更改类型,效果不太好,通常会导致运行时异常


我喜欢使用显式数据传输对象,而不是保留整个应用程序中使用的实际数据模型。然后,您从DTO->Model的翻译可以考虑版本差异。

添加或删除通常有效

您将在跟踪中收到关于属性丢失或找不到的运行时警告,但任何传输的数据都将仍然存在。开发时需要记住这一点,因为并非所有字段都有有效数据

更改类型,效果不太好,通常会导致运行时异常


我喜欢使用显式数据传输对象,而不是保留整个应用程序中使用的实际数据模型。然后,您从DTO->Model的转换可以考虑版本差异。

您最好的选择是针对后端类生成代码,为它们生成对应的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;
  }
}
查看用于Java->AS3代码生成的Granite数据服务项目


最好的办法是对后端类进行代码生成,为它们生成对应的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;
  }
}
查看用于Java->AS3代码生成的Granite数据服务项目