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

Posted

技术标签:

【中文标题】版本控制如何与 Flex 远程对象和 AMF 一起使用?【英文标题】:How does versioning work with Flex remote objects and AMF? 【发布时间】:2010-09-12 12:36:07 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

最好的办法是针对后端类进行代码生成,为它们生成对应的 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 的 Granite Data Services 项目 -> AS3 代码生成。

http://www.graniteds.org

【讨论】:

【参考方案2】:

添加或删除通常有效。

您将在跟踪中收到有关属性丢失或未找到的运行时警告,但任何已传输且有位置可去的数据仍会到达那里。您在开发时需要牢记这一点,因为并非所有字段都可能包含有效数据。

更改类型,效果不太好,而且经常会导致运行时异常。

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

【讨论】:

以上是关于版本控制如何与 Flex 远程对象和 AMF 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

基于AMF协议的Flex应用程序的性能测试

基于AMF协议的Flex应用程序的性能测试

AMF3 协议是不是适合 flash/flex 客户端服务器开发?

AMF和跨站点脚本漏洞混淆

Flex应用程序的可伸缩性和兼容性

如何在炼金术中将 ByteArray 传递给 C 代码?