2009-08-07 7 views
3

저는 이클립스 RCP의 초보자입니다. 그리고 나 자신을 위해 응용 프로그램을 빌드하려고합니다. 모델 객체를 실제로 처리하는 방법에 대해 혼란스러워합니다. 내가 겪고있는 문제를 해결할 수있는 예제는 없으므로 잘못된 방향으로 가고 있다고 생각합니다.Eclipse RCP 응용 프로그램에 "전역"데이터를 저장할 위치는 어디입니까?

말 인증 된 사용자 정보를 보유하는 클래스로 애플리케이션을 초기화해야한다고합니다. 내 WorkbenchWindowAdvisor (잘못된 장소입니까?)을 사용하여 표시 할보기를 결정하기위한 초기화 (예 : 인증)를 수행했습니다. 완료되면보기가 표시됩니다. 이제보기 으로 이전에 검색/생성 한 사용자 정보에 액세스해야합니다.

질문은, 그 견해는 어떻게 그 데이터를 얻는가? 보기는 plugin.xml에 있습니다. 내가보기에 데이터를 줄 수는 없습니다. 그래서 나는 그 견해를 여하튼 찾아야한다고 가정한다. 그러나 그것을 검색 할 수있는 적절한 장소는 무엇입니까? IApplication 구현에 정적 변수를 넣을 것을 생각했지만 잘못 생각했습니다. 조언이나 조언을 많이 주시면 감사하겠습니다. 감사.

+0

유사 항목 : http://stackoverflow.com/q/2457117/565879 – Buttons840

답변

5

내가 직면 한 문제는 RCP와 관련이 없다는 것입니다. 그것의 더 많은 건축 문제. 귀하의 의견은 비즈니스 로직과 유선으로 연결됩니다!

  1. 모델 - 뷰 - CONTROLER (MVC)
  2. 모델 - 뷰 - 발표자 (MVP) 당신은 충분히 찾을 수 있습니다

: 이 솔루션은 두 가지 (공통) 디자인 패턴에 의해 수행 될 수있다 이것에 대한 정보를 웹에서 찾아보십시오. MVP를 사용하여 특정 문제에 대한 가능한 해결책을 지적하겠습니다.

여러 프로젝트를 만들어야합니다. 하나는 물론 RCP 플러그인입니다. rcp.view으로 전화하십시오. 이제는 UI 기여도를 만들지 않는 다른 것을 만들고 (org.eclipse.core.runtime 만 시작) rcp.presenter이라고 부릅니다. 단순화하기 위해이 플러그인도 현재 모델이 될 것입니다.

다음 단계 :

  1. 이 rcp.view의 (그 발표자가 볼 수있는 참조가없는 중요한 것을)
  2. 수출 모든 의존성에 rcp.presenter 추가 패키지가 인 경우 rcp.presenter에서 을 생성하므로 표시됩니다.
  3. rcp.presenter에서 a 몇 가지 방법이있다 N 인터페이스 IPerspective (showLogiDialog(), showAdministratorViews (사용자 사용자), showStandardViews (사용자 사용자))
  4. 는 생성자에서 IPerspective를 받아 저장하는 클래스 PerspectivePresenter 만들기 등의 속성에 있음
  5. rcp 있음.보기, , 당신의 인터페이스 IPerspective를 구현 관점으로 이동하고 생성자에서 새 참조 발표자 = 새로운 PerspectivePresenter을 생성 (이)
  6. 전화 presenter.load() 발표자 어쩌면 등에 및 implenent 이 이

코드 : 당신이 볼 수 있듯이

public void load() 
{ 
    User user = view.showLoginDialog(); // returns a user with the provided name/pw 
    user.login(); // login to system/database 
    if(user.isAdministrator()) 
    view.showAdministratorViews(user); 
    else 
    view.showStandardViews(user); 
} 

는, 뷰는 단지 발표자에 대한 참조를 만들고, R은 모든 비즈니스 로직에 대해 책임을지고 발표자는 무엇을 표시할지 결정합니다. 그래서 당신의 관점에서 당신은 그러한 인터페이스 기능을 구현하고 각각에서 당신은 다른 방식으로 당신의 Perspective를 설정할 수 있습니다.

각보기에 대해 동일한 방식으로 진행되므로 작업을 수행하는보기에 대한 발표자가 필요하며보기를 사용하여 (인터페이스를 사용하여) 최종 데이터를 표시하고 전달할 것을 알립니다. 보기는 논리에 대해 신경 쓰지 않습니다. 이것은 JFace-Databinding을 사용할 때도 매우 유용합니다 (바인딩 된 데이터 만 뷰에 전달됩니다). 예를 들어, WorkbenchWindowAdisor는 애플리케이션에 필요한 모든 것을 생성합니다. 다른보기, 관심 사항, 그리고 나서 그들이 가지고있는 데이터에 따라 메뉴를 활성화/비활성화 할 수 있습니다 (예 : isAdministrator를 사용하면 특별한 adminMenu를 활성화 할 수 있습니다).

나는 이것이 상당히 무거운 방법이라는 것을 알고있다. 그러나 Eclipse RCP는 큰 (이름이 부자 인) 애플리케이션 용으로 설계되었다. 따라서 올바른 아키텍처에서 시간을 보내야합니다. 내 첫 번째 RCP 응용 프로그램은 당신이 묘사 한 것과 같았습니다 ... 물건을 저장할 위치와 모든 참조를 처리하는 방법을 알지 못했습니다. 내 작품에서 나는 MVP에 대해 배웠다 (그리고 나는 여전히 배우고있다). 개념을 이해하는 데는 시간이 걸리지 만 그만한 가치가 있습니다.

my second post at this question에서 플러그인을 구성하는 방법에 대한 다른 아이디어를 얻을 수 있습니다.

+1

답변을 입력 해 주셔서 감사합니다. 나는 그것을 줄 것이고, 나는 단지 그것을 "얻을 수 있는지"알 것이다. 포인터를 가져 주셔서 감사합니다. – aberrant80

+2

한 가지 더. 뷰는 모델에 대해 알고 있기 때문에 위의 패턴은 실제로 MVC입니다. 일반 MVP를 가지려면 뷰가 모델에 대해 알지 않아야하며 JFace-Databinding을 사용하여이 작업을 수행 할 수 있습니다. 그러나 설명대로 시작하고 Bindings를 나중에 소개 할 수 있습니다. 좋은 예제를 찾았습니다. http://rcpquickstart.com/2007/11/08/mvp-example-code/ – lostiniceland

관련 문제