[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 -> AS3 コード生成用の Granite Data Services プロジェクトを確認してください。
追加または削除は通常機能します。
プロパティが欠落しているか見つからないというランタイム警告がトレースに表示されますが、転送されて移動先があるデータは引き続きそこに到達します。すべてのフィールドに有効なデータがあるとは限らないため、開発中はこの点に留意する必要があります。
型の変更はうまく機能せず、実行時に例外が発生することがよくあります。
私は明示的なデータ転送オブジェクトを使用し、アプリ全体で使用される実際のデータ モデルを保持したくありません。次に、DTO->Model からの変換で、バージョンの違いを考慮することができます。