有誰知道一個框架,最好是讓Flex編譯器運行一個擴展或者可能只是一個構建步驟,以便我們可以生成我們應用程序的數據模型的強類型代理類。用於懶惰實例化的Flex強類型代理類
有2周主要的事情,我們希望與代理的做:
- 在運行時,我們要懶洋洋地分析和實例的實例作爲訪問(類同Java的Hibernate怎樣有懶代理對象)
- 在編輯器應用程序中,我們要實現setter調用,以便我們可以跟蹤哪些對象已被修改
- 除了像編程設置ChangeWatcther之類的事情之外,代理服務器在這種情況下確實非常必要,因爲我們需要跟蹤Array添加/刪除以及可能跟蹤「參考」obj學分,這樣,當「參考鍵」改變我們所知道的拯救那些被重點
引用它在,我們要基本抽象當對象從序列化加載代理首例對象數據,但如果它是真實的對象,仍然會傳遞相同的公共屬性和數據訪問模式。
基本上,代理會在第一次調用方法時實例化對象。
我知道我們可以使用一些AS3字節碼庫,如as3-commons-bytecode。
或可能重新調整GraniteDS代碼生成。
我寧願生成代碼,因爲它是一個確定性的東西,如果我們能夠在運行時更容易地調試它,它會很好。
有誰知道我是否可以像MXMLC那樣從MXML文件生成AS3代碼。
還有無論如何控制編譯管道中的「何時」我可以生成代碼,因爲我們有很多數據對象使用公共字段而不是getter/setters,但是[Bindable],所以如果我可以根據生成的getter/setter方法生成代理。
下面是一個示例應用程序數據對象和代理類:
[Bindable]
public class PersonDTO implements Serializable {
private var _name:String;
private var _age:Number
public function get age():Number {
return _age;
}
public function set age(a:Number):void {
_age = a;
}
public function get name():String {
return _name;
}
public function set name(n:String):void {
_name = n;
}
public void readObject(data:*) {
//...
}
}
// GENERATED CLASS BASED ON PersonDTO
public class LazyProxy_PersonDTO extends PersonDTO {
private var _instance:PersonDTO = null;
private var _instanceData:*;
private function getInstance():void {
if (_instance == null) {
_instance = new PersonDTO();
_instance.readObject(_instanceData);
}
}
override public function get age():Number {
//Ensure object is instantiated
return getInstance().age;
}
override public function get name():String {
//Ensure object is instantiated
return getInstance().name;
}
}
// GENERATED CLASS BASED ON PersonDTO
public class LogChangeProxy_PersonDTO extends PersonDTO {
//This will be set in the application
public var instance:PersonDTO;
//set by application
public var dirtyWatcher:DirtyWatcherManager;
override public function set age(a:Number):void {
dirtyWatcher.markAsDirty(instance);
instance.age = a;
}
}
不知道;但請查看dbHibernate http://code.google.com/p/dphibernate/。這可能是你正在尋找的東西。 – JeffryHouser