Wie funktioniert die Versionierung mit Remote-Objekten von Flex und AMF?


1

Angenommen, ich verwende das Tag [RemoteClass], um einer benutzerdefinierten Flex-Klasse Serialisierungsinformationen zuzuweisen.

Was passiert, wenn ich mein Objekt ändern muss (ein neues Feld hinzufügen, ein Feld entfernen, ein Feld umbenennen usw.)?

Gibt es ein Designmuster für eine elegante Handhabung?

1

Das Hinzufügen oder Entfernen funktioniert im Allgemeinen.

Sie erhalten Laufzeitwarnungen in Ihrer Ablaufverfolgung über Eigenschaften, die entweder fehlen oder nicht gefunden werden, aber alle Daten, die übertragen werden und eine Stelle haben, an die Sie gehen können, werden weiterhin dort angezeigt. Sie müssen dies bei der Entwicklung berücksichtigen, da möglicherweise nicht alle Felder gültige Daten enthalten.

Das Ändern von Typen funktioniert nicht so gut und führt oft zu Laufzeitausnahmen.

Ich verwende gerne explizite Datenübertragungsobjekte und behalte mein tatsächlich in der App verwendetes Datenmodell nicht bei. Dann kann Ihre Übersetzung von DTO-> Model Versionsunterschiede berücksichtigen.


3

Ihre beste Wette ist, Code-Generierung für Ihre Back-End-Klassen zu Generation ActionScript Gegenstücke für sie zu tun. Wenn Sie eine Basisklasse mit allen Objekteigenschaften generieren und anschließend eine Unterklasse für sie erstellen, die niemals geändert wird, können Sie weiterhin benutzerdefinierten Code hinzufügen und nur die Teile Ihrer Klasse regenerieren, die sich ändern. Beispiel:

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; 
    } 
} 

Sehen Sie sich das Projekt Granite Data Services für die Java -> AS3-Code-Generierung an.

http://www.graniteds.org