版本控制如何与Flex远程对象和AMF一起使用?

时间:2020-03-06 14:37:30  来源:igfitidea点击:

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

当我需要更改对象(添加新字段,删除字段,重命名字段等)时会发生什么?

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

解决方案

添加或者删除通常是可行的。

我们会在跟踪中收到有关属性丢失或者找不到的运行时警告,但是任何已传输并可以移动的数据仍然可以到达该位置。在开发时,我们需要牢记这一点,因为并非所有字段都可能具有有效的数据。

更改类型不能很好地工作,并且通常会导致运行时异常。

我喜欢使用显式的数据传输对象,而不是坚持在整个应用程序中使用的实际数据模型。然后,我们从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数据服务项目。

http://www.graniteds.org