2011-10-24 3 views
1

나는 통제 할 수없는 클라이언트의 프레임 워크에로드 될 플래시 캠페인을 만들고 있습니다. 프레임 워크는 이미 로케일, 글꼴 및 사본과 같은 몇 가지 항목을로드하고 초기화시 이러한 항목을 내 swf에 전달합니다.PureMVC MultiCore 앱에서로드 된 모듈에 프록시를 전달 하시겠습니까?

내 swf (쉘이라고 부름)의 크기가 제한되어 있으므로 캠페인 별 프리 로더를 표시 한 다음 나머지 swf (캠페인이라고 부름)를로드합니다.

셸과 캠페인은 모두 PureMVC 모듈입니다. 셸은 몇 개의 프록시를 만들고 프레임 워크에서 전달 된 데이터 (로캘 상수, 글꼴 등)를 캠페인에로드하기 전에 채 웁니다.

캠페인을로드 할 때도 로케일과 글꼴 등이 필요하므로 제 질문은이 데이터를 쉘 모듈의 캠페인 모듈에 전달하는 가장 좋은 방법입니다.

  • 나는 캠페인 모듈에 같은 프록시를 생성하고 캐시 할 것이다, 다시 데이터를로드, 그러나 이것은 분명히 갈 길을 잘못 느낌 수 있습니다.

  • 나는 파이프 유틸리티의 사용에 대해 조사해 보았습니다. 그러나 이것은 통신이 단방향 일 것이고 캠페인 초기화 중에 한 번 발생하기 때문에 약간의 잔인한 것처럼 보입니다.

  • 프록시 패턴을 캠페인 모듈의 init 메소드로 전달한 다음 캠페인 모듈 시작 명령에이 프록시를 등록하는 것이 디자인 패턴 관점에서 "확인"됩니까? 이 프록시는 알림 이름을 통해 내 셸 응용 프로그램 facade에 대한 참조를 가지고 있기 때문에 잘못되었습니다. 알림 이름을 두 모듈 모두 사용할 수있는 "NotificationConstants"클래스로 이동하면 괜찮습니까?

  • 캠페인 모듈에 비슷한 프록시를 만들 수 있지만 이번에는 이전에 언급 된 init 메소드에 전달 된 이전 프록시의 데이터 객체로 채울 수 있습니까? 자연이

답변

2

내가 일반적으로 사용하는 솔루션은 인터페이스를 만드는 것입니다 .. 데이터 객체 내 쉘 모듈에 대한 참조를 가지고 있지 않지만 "오래된"프록시 않기 때문에 그것을 할 수있는 가장 좋은 방법 같은 느낌 : 캠페인 모듈이 인터페이스를 구현해야합니다

interface Campaign { 
    function set campaignDetails(value:CampaignDetails):void; 

    //... 
} 

- 구현에 당신이 복제 알림 및 참조를 피하기 것이다 그래야 당신이 모듈의 다른 프록시를 사용하는 것이 좋습니다. 쉘이 모듈의 로딩 준비가되면

는 그냥 가진다 :

if (module is Campaign) 
{ 
    (module as Campaign).campaignDetails = ...; 
} 

은 내가 당신에게 새로운 아무것도 이야기하지거야 확신합니다. 셸과 모듈 사이의 인터페이스는 인터페이스 수준에서만 유지해야합니다. 그런 다음 데이터를 전달하고 모듈 MVC 코어를 쉘에서 독립적으로 처리하도록합니다.

+0

같은 종류의 데이터에 대해 서로 다른 프록시를 사용하는 것은 "자신을 반복하지 마십시오"라는 고전적인 규칙을 어기는 것 같아요. 그래서 나는 그 프록시를위한 "공유 된"패키지를 만들고, NotificationConstants 클래스 그렇게하면 쉘 및 캠페인 모듈 모두 공유 패키지에 대한 참조 만 갖게됩니다. 이 패키지에서는 프록시를 전달하는 적절한 방법을 제안 할 때 ICampaign 인터페이스도 추가합니다. – Sebastian

+1

오, 방금 찾은 마지막 단락을 확인하십시오. 프록시가 내가 생각하는 프로젝트의 다른 클래스를 참조하면 안된다는 의미가됩니다. http://puremvc.org/content/view/93/188/ – Sebastian