레이블이 PureMVC인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PureMVC인 게시물을 표시합니다. 모든 게시물 표시

2009년 8월 12일 수요일

PureMVC 사용에 대한 고민 4

Yakov Fain 중심으로 찾아가면 뭐가 많다. farata에서 공개한 Clear Toolkit을 대충 봤다. Enterprise Development with Flex: Best Practices for RIA Developers 사봐야겠다.

 

참고 :

+ Anti Flex Frameworks, Shall We? - http://www.flex888.com/768/anti-flex-frameworks-shall-we.html

+ Clear Toolkit - http://sourceforge.net/projects/cleartoolkit/

 

 

2009년 7월 21일 화요일

2009년 7월 20일 월요일

PureMVC 사용에 대한 고민 2

이번에 PureMVC를 안 쓴 프로젝트를 페어 하면서 배운 것.

 

+ 계층 구조가 복잡한 컨트롤 집합에서 한 쪽의 이벤트에 의해 다른 쪽이 바뀌는 경우 PureMVC는 notification을 쏘면 관련된 컨트롤이 알아서 반응 하지만 Flex만 사용하는 경우 여기서 쏘고 저기서 받아다 다시 쏴주고 이런식으로 해야 하는 것 같다. Flex 자체에서 지원되는 다른 방법은 없는 것 같다(확실하지 않음). 이를 직접 구현 가능하다 할지라도 PureMVC가 제공하는 무언가를 만드는 것이므로 이는 PureMVC의 장점이다.

 

+ 자료구조를 직접 구현하느냐 XML에서 e4x 등으로 사용하느냐 문제는 이전의 고민 에서 생각을 조금 바꿔야겠다. XML처럼 런타임에 데이터를 확인할 수 있는 구조는 테스트가 완벽하지 않으면 버그가 생겼는지 아닌지 알기 어렵다. 타입을 강조하면 컴파일 타임에 에러로 알 수 있는 장점이 있다. 가장 적당한 수준은 자료구조 직접 구현에 검색은 구조를 XML로 바꿔서 e4x로 검색하기 정도가 아닐까 싶다. 물론 아직 추측.

 

+ PureMVC에서 모델로 XML을 사용하고 notification으로 그 xml의 참조를 보내서 dataProvider로 연결하는 코드를 봤다. 뷰 컴포넌트의 dataProvider에 맞춰서 모델을 사용하면 모델 재사용성의 증가는 언제 말할 수 있을까?

 

배운 것이라고 시작하고선 또 질문만 잔뜩 만들었구나.

2009년 7월 15일 수요일

PureMVC 사용에 대한 고민

Flex에서 PureMVC를 사용하여 얻는 이득이 뭘까? iPhone 개발때 UIKit이라는 프레임워크를 사용한 경험이 있다. UIKit은 기본적으로 MVC를 지원하는 구조다. 그런데 PureMVC는 Objective-C용 포팅도 존재한다. MVC위에서 MVC 프레임워크를 사용한다는 게 무슨 의미일까? 기존 MVC는 MVC인거고 PureMVC만의 장점을 추가적으로 얻겠다는 것일까? 나와 비슷한 의문을 갖고 있던 사람의 글이 있다.

 

참고 : http://www.bit-101.com/blog/?p=1954 (Cliff는 다음 문장이 포함된 코멘트를 달았음 "Do I need a MVC framework such as PureMVC for developing an iPhone app? You don’t! Because Objective-C based already on a MVC paradigma.". Brian Knorr도 코멘트를 달았는데 어떻게 좋아졌다는 것인지는 잘 모르겠다.)

 

예전 iPhone 개발 경험에 비추어 생각한 거지만 나의 질문은 처음에 말한 것 처럼 Flex에서 모델과 뷰를 분리하는데 PureMVC가 주는 이득이다. 물론 PureMVC의 다른 장점도 있지만 이번 프로젝트를 PureMVC로 진행하면서 View를 표현하기 위한 컬렉션과 모델의 컬렉션 두 개를 유지하면서 문제가 있었다. 뷰 자체가 child 뷰들을 갖고 있는 리스트와 내가 모델에서 사용한 리스트의 행동이 달라서 생긴 것인데 차라리 뷰에 지정한 dataProvider를 모델로 사용하면 두 리스트의 내용을 동일하게 맞추기 위해서 고생을 할 필요가 없을 것 같다.

 

아직 잘 모르겠어서 글은 의문일 뿐이다. 머리로만 생각해서는 답을 잘 못내리겠다. 내가 이상하게 짜놓은 것과 비교를 한 것일 수도 있다. 코드좀 더 짜봐야지.

2009년 6월 22일 월요일

PureMVC에서 Popup은 어떻게 다룰까?

PopManager 라는 게 있다. PureMVC 내부에 있는 건 아니고 따로 구현해야 한다. PopUp을 생성하면서 Mediator와 연결시켜 준다.

 

참고 : http://forums.puremvc.org/index.php?topic=105.0

2009년 6월 9일 화요일

PureMVC MultiCore에서 AppSkeleton 문제 해결

PureMVC AS3 Standard에 보면 App Skeleton 예제가 있다. 이 예제는 MultiCore로 바꾸면 문제가 된다. 원인은 이렇다.

 

총 3개의 Proxy들이 등록되는데 두 개의 Proxy는 나머지 한 개의 Proxy를 retrieveProxy로 얻으려고 한다. 이때 생성자에서 facade를 사용하는데 Standard는 ApplicationFacade가 Singleton이기 때문에 문제가 없다. 하지만 MultiCore에서는 Proxy나 Mediator가 register되기 전에 facade를 호출하면 key를 알 길이 없어서 죽어버린다.

 

좌절은 금지다. 잘 찾아보니 onRegister() 라는 메소드를 오버라이드 할 수 있다. 이 메소드를 오버라이드 하면 Proxy나 Mediator가 등록될 때 onRegister()가 호출된다. 여기에 facade를 사용하는 코드를 넣으면 된다. 문서에선 이게 무슨 의미인지 아직 정확히 안써놔서 몰랐었는데 결국 알게됐다. 이런건 꼭 퇴근시간 지나면 자연히 알게 되더라. 철야.

PureMVC의 proxy를 flexunit으로 테스트 하기

죽음의 테스트를 완벽하게 통과한 튼튼한 모델이라 할지라도 PureMVC 상에서 메세지를 잃게되면 프로그램은 먹통으로 보이게 된다. 맘편하게 Notification처리 구조를 바꾸고 싶다면 어떻게 해야 할까? Notification에 대한 테스트를 만들어야 한다. flexunit은 순수한 ActionScript3 이벤트는 테스트 할 수 있어도 PureMVC의 Notification을 이해하지 못한다. 해서 나온 것이 이것이다. http://code.google.com/p/puremvc-flexunit-testing/

 

사용법

1. 라이브러리를 추가하고 PureMVCTestCase를 상속받는 TestCase를 만든다.

2. TestCase 내부에 테스트를 하고자 하는 proxy와 view를 얻는 getter를 만든다.

 

  public function get proxy():MyProxy
  {
   return ApplicationFacade.getInstance(ApplicationFacade.NAME).

      retrieveProxy(MyProxy.NAME) as MyProxy;
  }
 
  public function get view():IView
  {
   return View.getInstance(MyMediator.NAME);
  }

3. registerObserver(view, proxy, MyProxy.INIT, OnInit, 1000); 이런 식으로 테스트 안에서 실행 시킨다.

4. public function OnInit(event:PureMVCNotificationEvent):void 이렇게 받는다.

 

컴파일 된 라이브러리를 받아다가 프로젝트에 적용하니 multicore쪽 패키지를 찾으려고 했다. 코드 볼 시간이 없어서 그냥 PureMVC를 Standard에서 Multicore로 바꾸고 프로젝트 구조를 example 따라서 바꿨더니 쉽게 됐다.

 

참고 : http://marburger.cc/posts/flexunit-testing-puremvc-code

2009년 6월 5일 금요일

Flash에서 비동기로 얻어오는 XML파일 순서대로 여는 방법

Flash에서 몇 개의 XML을 읽을 때 1번 파일에서 얻은 값을 2번을 읽는데 사용하는 경우가 생길 수 있다. 문제는 XML을 비동기로 호출하니 1번은 다 얻어오기 전에 2번을 읽으려고 한다는 것.

 

PureMVC의 App Skeleton에서는 리소스 목록을 관리하는 StartupMonitorProxy에 XML파일 하나를 대표하는 Proxy들을 추가하여 Proxy가 생성되는 순서대로 XML을 얻어오게 하는 코드가 있다.

 

물론 내가 뛰어난 실력으로 그런 것들을 한 눈에 파악한 것은 아니고. 아무 생각없이 지웠다가 안되길래 다시 보며 파악한 것. ㅎ 집에 가고싶다.

2009년 6월 3일 수요일

PureMVC에서 Proxy 클래스 만들기

PureMVC에서 Proxy 클래스를 어떻게 구성해야 할지 생각해봤다. 다수의 아이템들을 포함하는 배열과 같은 구조를 만든다고 하면 배열 클래스와 아이템 클래스들 모두 Proxy여야 할까 배열 클래스만 Proxy고 아이템 클래스는 일반적인 클래스로 해야 할까?

 

처음에는 한 개의 아이템이 바뀌면 Notification이 전송되고 그 아이템에 해당하는 UI상의 한 요소가 자동으로 바뀌는 모양을 생각했다. 즉 아이템도 Proxy로 만드는 구조를 생각했다. 그런데 예제들 중 동적으로 생성된 Proxy에 이름을 부여하는 예제는 못본 것같다. PureMVC는 모델을 얻어오건 Notification 종류를 분류하건 동적으로 생성된 인스턴스의 이름을 알아야 얻을 수 있는데 정적으로 되어 있는 경우만 봤다. 동적으로 생성된 모델의 이름을 뷰 등에서 알 수 있게 하는 방법도 편해 보이지는 않는다.

 

아직 깊이 생각을 못해봤지만 Proxy는 시스템 상에서 한 개로 존재하는 값들을 저장하는 공간이 되어야 할 것같다.