假设我使用 [RemoteClass] 标签赋予自定义 Flex 类以序列化智能。
当我需要更改对象(添加新字段、删除字段、重命名字段等)时会发生什么?
是否有一种设计模式可以优雅地处理这个问题?
假设我使用 [RemoteClass] 标签赋予自定义 Flex 类以序列化智能。
当我需要更改对象(添加新字段、删除字段、重命名字段等)时会发生什么?
是否有一种设计模式可以优雅地处理这个问题?
最好的办法是针对后端类生成代码,为它们生成对应的 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 代码生成。
添加或删除通常有效。
您将在跟踪中收到有关属性丢失或未找到的运行时警告,但任何已传输且有可去处的数据仍会到达那里。您需要在开发时牢记这一点,因为并非所有字段都可能包含有效数据。
更改类型并不能很好地工作,并且通常会导致运行时异常。
我喜欢使用显式的数据传输对象,而不是保留在整个应用程序中使用的实际数据模型。然后您从 DTO->Model 的翻译可以考虑版本差异。