2010-05-27 8 views
3

나는 많은 모델 객체를 가지고있다.모델을 뷰에서 분리하는 방법은 무엇입니까?

이러한 개체는 리치 클라이언트 응용 프로그램에서보기 (양식)로 렌더링됩니다.

모델 객체 (자바 주석)의 필드에 주석을 달기 시작했습니다 (예 : displayname, group, page, validvalues).

이제보기가 모델에 들어 왔음을 알았습니다.

모델 객체에서 뷰 논리를 어떻게 분리해야합니까?

TECH : 자바, 자바 주석, 이클립스 RCP

편집 : 내 질문은 이론적,하지만 난 것 또한 일부 콘크리트 (구현) 조언있다.

답변

0

MVC 패턴을보고 믹스에 컨트롤러를 도입하여 모델과 뷰 간의 통신을 제공 할 수 있습니다.

이것은, 뷰 모델 모델과 뷰 명백한 진술의 위험을 무릅

+0

감사합니다. 이미 MVC 형식을 사용하고 있습니다. 그러나 모델의 필드에 연결되는 XML이나 모델 필드 사이에지도를 제공하는 컨트롤러와 같이 실제로 구현 된 방식을 알고 싶습니다. 그리고 필드를 표시 ... – geejay

1

사이의 모든 상호 작용을 담당하는 컨트롤러로 단지 회담 회담 결코 같은 모델에 들어온다보기를 방지 디스플레이 관련 정보를 다른 위치에 저장하면됩니다. 페이지를 모델 코드에 넣지 마십시오. 인터페이스 용 개체를 만들고 페이지 개체를 포함하고 각 페이지에 표시되는 값을 알게하십시오. 이를 위해서는 일정량의 리팩토링이 필요할 수 있습니다.

당신이 언급 한 모든 것이 '보기'는 아니지만. 필드의 유효한 값은 필드의 논리 일부입니다. 보기가 아닌 모델의 일부로 간주되어야합니다. 마찬가지로 '그룹'이 인터페이스의 배치가 아닌 논리적 그룹 인 경우 모델의 일부로 간주 될 수 있습니다.

0

내가 맞으면 모델 클래스를 (정적) 모델로 사용하여 뷰의 일부분을 생성합니까? 어떨까요 - 귀하의 경우 모델 (주석이있는 모델)은 하나의 모델이며, 개체는입니다.

주석이 힌트를 제공하는 한 (예 : @Textfield) 문제가 보이지 않습니다. 모델에 이미 뷰 객체에 대한 참조 (예 : 텍스트 필드에 대한 참조)가 포함되어 있으면 리팩터링이 필요합니다. 가장 쉬운 방법은 별도의 플러그인에서 모델 클래스를 이동하고 * .ui 유형 및 뷰 플러그인을 종속 항목으로 추가하지 않는 것입니다. 그런 다음 오류를 수정하십시오.)

... jface 데이터 바인딩을 살펴보십시오! MVC/MVP 아키텍처에서 매우 유용합니다!

+0

고마워, 나는 이미 JFace 데이터 바인딩을 사용하고 있습니다. 모델 클래스와 객체에 대한 주석은 흥미 롭습니다. 그리고 저는이 클래스가 모델 구성 요소에 있다는 것을 동의합니다. 실제로는 올바르게 보이지 않습니다 ... – geejay

+0

그러나 모든 표현 레이어에 대한 힌트 만 포함하면 괜찮아요. 또는 속성 파일과 같은 힌트가 포함 된 별도의 문서를 유지 관리 할 수 ​​있습니다. 하지만 이로 인해 모델과 속성 파일이 동기화되지 않을 위험이 있습니다. –

+0

UI에 대한 힌트가 MVC 분리를 엄격하게 깨뜨리지는 않지만, 왜 물어야합니까? 왜 정보를 View 구현에 저장하지 않습니까? – DJClayworth

1

당신은 주석을 대체 할 수있는 :

@DisplayName("My Fancy Name") 
@DisplayGroup("My Fancy Group") 
public String myProperty; 

을 별도의 기술자 클래스 :

Descriptor desc = new Descriptor(MyClass.class, "myProperty"); 
desc.setDisplayName("My Fancy Name"); 
desc.setDisplayGroup("My Fancy Group"); 

을 당신은 문제가 완전히 분리가 있지만, 자바는 않기 때문에 당신이 자바 (시간 안전을 컴파일 느슨한 속성 참조가 없음).

0

보기에는 모델에 대한 참조가 있어야하지만 모델에는보기에 대한 참조가 없어야합니다.

보기에서 모델에 쓸 수 있습니다.

뷰는 특성 변경 또는 콜렉션 변경과 같은 모델 이벤트를 수신합니다.

그러면 모델이 변경되면보기가 자동으로 업데이트됩니다.

모델을 뷰로 렌더링하는 모델에는 메서드가 없어야합니다.

관련 문제