2

Flex 프레임 워크에 대해 알고있는 사람이 있습니까? Flex 컴파일러에서 확장을 실행하거나 또는 응용 프로그램의 데이터 모델의 강력한 형식화 된 프록시 클래스를 생성 할 수있는 빌드 단계 만 있으면됩니다.느린 인스턴스화를위한 Flex 형식의 프록시 클래스

2 개 주 일들이 우리가 프록시의로 할 수 있습니다 (자바의 Hibernate는 게으른 프록시 개체가 어떻게 비슷한)

  • 액세스로 런타임시

    1. 우리가 게으르게 구문 분석하고 인스턴스를 인스턴스화 할 에디터 응용 프로그램에서 setter 호출을 구현하여 어떤 객체가 수정되었는지 추적 할 수 있도록했습니다.
      • 이 경우에는 ChangeWatcther를 프로그래밍 방식으로 설정하는 것 이상의 프록시가 필요합니다. Array 추가/제거 및 추적 가능 "참조"obj ECTS 그래서 "참조 키"가 변경 될 때 우리는 우리가 프록시가 그 객체가 직렬화에서 기본적으로 추상적 인로드 할 때 할 첫 번째 경우 키

    하여 참조하는 이러한 개체를 저장 알고 데이터이지만 실제 객체 인 경우 동일한 공개 속성 및 데이터 액세스 패턴을 사용하여 참조를 계속 전달합니다.

    기본적으로 프록시는 메서드가 처음 호출 될 때 개체를 인스턴스화합니다.

    as3-commons-bytecode과 같은 AS3 바이트 코드 라이브러리를 사용할 수 있습니다.

    또는 GraniteDS 코드 생성을 재사용 할 수도 있습니다.

    코드를 결정적으로 생성하기 때문에 코드를 생성하는 것이 더 좋으며 런타임에 쉽게 디버깅 할 수 있다면 좋을 것입니다.

    MXMLC에서 MXML 파일에서 AS3 코드를 생성 할 때 MXMLC와 같은 작업을 수행 할 수 있는지 알 수 있습니까?

    또한 컴파일 파이프 라인에서 코드를 생성 할 수있는 "언제"를 제어 할 수 있습니까? getter/setters 대신 public 필드를 사용하는 많은 데이터 객체가 있지만 [Bindable]이므로 가능한 경우 생성 된 getter/setter 메소드를 기반으로 프록시를 생성합니다.

    는 여기에 예제 응용 프로그램 데이터 객체 및 프록시 클래스의 : AS3 - 커먼즈 바이트 코드 라이브러리에 좀 더 깊이 파고

    [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; 
        } 
    
    } 
    
  • +0

    확실하지; 그러나 dbHibernate http://code.google.com/p/dphibernate/를 확인하십시오. 그것은 당신이 찾고있는 것일 수 있습니다. – JeffryHouser

    답변

    2

    가 생성하는 프록시 클래스와 인터셉터를 지원하는 것 같습니다.

    • http://www.as3commons.org/as3-commons-bytecode/proxy.html

      public class DirtyUpdateInterceptor implements IInterceptor { 
      
      public function DirtyUpdateInterceptor() { 
          super(); 
      } 
      
      public function intercept(invocation:IMethodInvocation):void { 
          if (invocation.kind === MethodInvocationKind.SETTER) { 
           if (invocation.arguments[0] != invocation.instance[invocation.targetMember]) { 
            invocation.instance.isDirty = true; 
           } 
          } 
      } 
      }