본문 바로가기

Documents/Startup

Vulcan Project 초기화 과정

Application에서 Vulcan Project 적용 시작점

낮선 코드를 접할때나 디버깅 할때나 무슨 일을 하던지 시작점을 찾는다는건 중요한 일인것 같습니다. 시작점을 찾기 전까진 언제나 헤맬 수 밖에 없죠. 그래서 Vulcan Project에서는 명확하게 시작 메서드 이름을 start로 명명했습니다.

SubSystem(Facade)의 start()메서드에 view를 담당할 Component(보통 Flex의 Application 또는 WindowedApplication 객체)를 전달하는 것으로 Vulcan Project의 코드가 시작됩니다. Vulcan Project의 초기화 과정의 중심에는 Facade를 상속받은 SubSystem 클래스가 있습니다.

var multitonKey:String = UIDUtil.createUID();
var system:SubSystem = NewSubSystem.start(multitonKey, this);

초기화 과정에서 생성되는 것들

SubSystem의 구성 요소

프로그램이 구동되면 어플리케이션에 필요한 여러 요소들이 생성됩니다. 생성되는 객체가 많다보니 Group으로 묶어 관리합니다.

보통 해당 Group 클래스에서 생성 메서드를 추가 시키거나 override하여 기능을 확장시킬 수 있습니다. Group 객체를 만들어 사용하는 이유는 다음과 같습니다.

  • 프레임웍을 확장하면 할수록 객체를 참조하기 위해 facade로부터 해당 객체를 찾아서 캐스팅하는 부분이 항상 두세줄 이상의 구문으로 길게 코딩되어집니다. 이를 짧게 줄이기 위해서 입니다.
  • 각 Group 내부의 각 생성을 담당하는 메서드를 오버라이딩하는 것으로 상속을 통한 확장방법을 지원하기 위해서 입니다.
  • Facade를 통해 접근할때 비슷한 역할을 하는 객체끼리 Group으로 분류함으로써 SubSystem을 통해 접근할때 해당 객체를 찾기 쉽도록 하기 위함입니다.

다음과 같은 Group 객체들이 지원되고 있습니다.(0.6a 기준)

ProcedureGroup

procedure 객체의 생성을 관리합니다.

다음은 문서 관련 지원되는 기능입니다.

  • newDocumentProcedure : 새문서 열기
  • closeDocumentProcedure : 문서 닫기
  • closeDocumentAllProcedure : 모든 문서 닫기
  • modifyDocumentProcedure : 문서 수정
  • openDocumentProcedure : 문서 열기
  • saveDocumentProcedure : 문서 저장
  • saveAsDocumentProcedure : 다른 이름으로 문서 저장
  • selectDocumentProcedure : 문서 선택
  • subSystemProcedure : 문서 자체 정보 관리
  • documentProcedure : 문서의 내용에 관련된(CodeGenerator 관련) 기능

다음은 Graphic Editor를 위해 지원되는 기능입니다.

  • _copyGraphicItemProcedure : Graphic 아이템 복사
  • _pasteGraphicItemProcedure : Graphic 아이템 붙여넣기

LibraryGroup

외부로부터 로드된 자원을 관리합니다.

  • Catalog를 통한 Document 유형별로 로드된 자원 관리
  • Swc를 읽어들여 로드된 클래스와 Asset을 관리
  • SWC를 통해 로드된 자원을 필터링

InternalAPIGroup

내부적으로 자주 사용되는 객체 또는 메서드를 API 형식으로 제공하기 위해 사용합니다.

CommandAPIGroup

항상 일정한 방법으로 command 호출하기 위한 API 메서드 관리합니다. 예를 들어 MenuBar를 통해 Command를 호출하고 싶다면 먼저 CommandAPIGroup의 API 목록에 있는지 찾아보는게 좋습니다. (0.6a 기준)

Document 관련

  • newDocument : 새문서
  • selectDocument : 문서 선택
  • closeDocument : 문서 제거
  • modifyDocument : 문서 수정
  • saveDocument : 저장
  • saveAsDocument : 다른 이름으로 저장
  • openDocument : 열기

문서내 아이템 편집

  • add : 아이템 추가
  • select : 아이템 선택 변경
  • remove : 아이템 제거
  • removeSelectAll : 선택된 아이템 제거
  • modify : 아이템 수정

GraphicEditor의 경우  Copy & Paste

  • copyGraphicItem :  GraphicItem 복사
  • pasteGraphicItem : GraphicItem 붙여넣기

History 관련

  • undo : 실행 취소
  • redo : 다시 실행

Docking System 관련

  • openWindowItem : WindowItem열기
  • closeWindowItem : WindowItem닫기
  • closeWindowItemAll : 모든 WindowItem 닫기
  • closeDocumentAll : 모든 Document 문서 닫기
  • closePerspective : Docking System 리셋
  • resetSubSystem : SubSystem 리셋

ManagerGroup

각 키보드 단축키, 포커싱, 팝업창 등의 Manager 클래스의 생성을 관리합니다.

  • fileSystemManager : 접근 가능한 File System API 관리
  • popupContentManager : Content에 따라 Popup창 띄우기
  • keyManager : 포커싱 객체에 따라 키 이벤트를 관리
  • focusManager : Docking System에서 WindowItem의 Focus 상태 관리
  • itemBuilderManager : Docking System에서 WindowItem에 MVC 시스템이 생성될때 객체 관리

SubSystem의 MVC 구조 빌드

마지막으로 MVC 패턴 적용에 필요한 구조를 SubSystemBuilder 클래스를 통하여 빌드합니다. SubSystemBuilder 클래스는 SubSystem에 Proxy, Command, Mediator 클래스를 등록하고 로드할 데이터가 있다면 로드합니다.

그렇다면 Vulcan Project를 확장하여 사용자는 어디에서 기능을 추가하고 코딩한 부분은 언제 실행되는 걸까요. 바로 SubSystemBuilder에 Proxy, Mediator 클래스가 등록 될때 각 클래스의 onRegister메서드가 사용자 코드가 시작되는 시작점이 됩니다. Mediator를 등록했다면 Mediator의 onRegister 메서드에서 view의 이벤트를 등록하는 방식으로, Proxy를 등록 했다면 Proxy의 onRegister 메서드에서 데이터를 초기화 시키는 방식으로 기능을 확장시키는게 보통입니다. 이미 지원되는 기능에 대해서는 위에서 언급한 각 Group의 클래스를 상속받아 구현할 수도 있고 새로 추가할 수도 있습니다.


이제 모든 초기화 과정이 끝났습니다. 남은건 사용자에 의한 interation에 반응하도록 다양한 기능의 컴포넌트들을 Applicatipon에 통합시키는 일이겠죠. 다음에는 예제를 통해 실제 Application 구축 과정을 소개하도록 하겠습니다.

'Documents > Startup' 카테고리의 다른 글

NAME, NAME_TYPE 속성을 이용한 인스턴스 찾기  (4) 2010.10.29
Vulcan Project 구조  (0) 2010.10.25
PureMVC Framework 수정사항  (4) 2010.10.16