2009-04-07 6 views
0

주어진 소프트웨어 시스템의 전체 구조는 모델보기 컨트롤러입니다. 보기 (그래픽 인터페이스)는 모델 (도메인 개체 모델)을 나타냅니다.모델보기 동기화 (또는 동기화 방지)

그러나보기 (그래픽 인터페이스)에는 구성 요소 (예 : JTextComponent)가 있습니다. 이러한 구성 요소도 모델 뷰 컨트롤러에 정렬됩니다. JTextComponent는 Document을 모델로 사용합니다.

JTextComponent는 도메인 개체 모델의 특정 부분을 나타 내기위한 것입니다. 그러나 그 모델은 실제로 Document 객체입니다.

JTextComponent에 의해 묘사 된이 정보 하나는 JTextComponent Document와 도메인 객체 모델에 저장됩니다. 이 조직은 모델의이 정보를 복제합니다. 따라서 두 모델을 동기화 된 상태로 유지해야합니다. DRY 위반.

도메인 객체 모델의 일부에 JTextComponent (또는 그래픽 구성 요소)를 바인딩하는 멋진 솔루션이 있습니까? 그렇다면 실제로 데이터를위한 장소는 하나입니까?

답변

1

여기에 몇 가지가 있습니다.

Java 프레임 워크는 UI를 업데이트하는 좋은 방법을 제공하지만 특정 구조 인 문서를 사용하도록 제한합니다.

반면에 데이터를 나타내는 적절한 모델이 있습니다. 모델에서 Document를 직접 사용하면 모델을 특정 프레임 워크에 묶는 위험을 감수해야합니다. 어떤 좋은 생각이 아닌가.

Java Document 프레임 워크는 모델과 문서간에 Adapter class을 생성하기 위해이를 활용할 수있는 변경 사항을 수신하는 기능을 제공합니다. 기본적으로 폼을 설정할 때 어댑터 클래스의 인스턴스를 만듭니다. 모델로 초기화 할 것입니다. 어댑터에는 문서를 반환하는 속성이 있습니다. 게다가, 어댑터는 그 문서 모델의 청취자로서 스스로를 등록합니다. 어댑터는 문서 모델에 대한 기회를 모델로 변환하는 방법을 알기에 충분히 똑똑 할 것입니다.

  1. UI 같은이 JTextDocument과 함께 만들어갑니다.
  2. 생성 과정에서보기에서 모델을 요청합니다.
  3. 모델을 초기화하는 어댑터 의 인스턴스를 만듭니다.
  4. 또한 어댑터는 문서의 수신기로 설정합니다.
  5. JTextDocument 개체에 문서를 할당합니다. 문서와
  6. 모든 상호 작용은
  7. 어댑터가 다시 번역 데이터를 전달보기 통지를 어댑터에 다시보고 입니다.
  8. 보기가 모델을 변경합니다.
  9. 보기는 모델이 변경된 어댑터를 nofitifies.
  10. 어댑터는 변경 내용 을 문서의 변경 사항으로 변환합니다.

어댑터가 Java 프레임 워크에 연결되어 있기 때문에 UI에 최대한 가깝게 밀어 넣어야합니다. View가 사용하는 프레임 워크와 관련된 특정 사항을 참조 할 필요가 없도록 Adapter가 View에 의해 노출 된 인터페이스를 구현할 가능성이 있습니다. 프레임 워크를 변경하면 해당 인터페이스를 구현하는 새 객체를 만들고보기가 더 현명하지 않습니다.

2

개체 모델에서 자신의 Document 개체를 만듭니다.

그런 다음 setDocument(d) method을 사용하십시오.

+0

또는 Document를 사용하는 생성자. –

1

귀하가 평행 한 봉쇄 계급을 직면하고 있음을 이해하는 경우.

enter code here 
        view -----------------------> Model 
        | 
        v 
       TextArea------------------------>Document 

걱정하지 마세요. 모델의 데이터가 문서에도 있어야합니다. 이 문제를 해결하는 가장 우아한 방법은 문서를 모델 자체에서 떼어내는 것입니다. 즉, 문서를 전체 모델에 창으로 표시하는 것입니다.

나는 Yuval이 같은 것을 제안한다고 생각합니다.