2009-12-09 3 views
1

MVC 패턴을 이해하고 연습하여 개발을 개선하려고합니다. 그래서 저는 지금까지 쓴 적이 있고 지금까지 진행된 응용 프로그램을 리팩토링하기 시작했습니다. 내 모델이 어떻게 보이는지, 그리고 뷰가 지금까지 준비되었는지는 완전히 분명합니다. 하지만 지금은 컨트롤러 레이어를 설계하는 좋은 방법을 찾고 있습니다.
다른 주요 구성 요소로 분할 된보기를 만들었습니다. 내가 당신에게 간단한 예를 들어 보겠습니다 : 모든 구성 요소를 잡고mvc 컨트롤러 레이어 설계

  • "FilePanel"는 JTextField를 들고 두 JButton의
  • "DataPanel"표시이 켜지지 :

    그룹 특정 구성 요소 (3 개) 패널이 있습니다 일부 일정-시트

이 세 패널을 보여주는 일부 데이터 및 일부 JButton의

  • "CalendarPanel는"별도의 클래스에서 각각, 그 후 인스턴스화과 ar GUI 클래스에 속했다.

    실제 질문이 없습니다. 패널을 분리 할 때 컨트롤러를 어떻게 구축해야합니까? 각각의 패널은 자체 컨트롤러 클래스 (FileController, DataController, CalendarController)를 가져야합니까? 또는 전체보기에 대해 컨트롤러 클래스가 하나만 있어야합니까?

    각 패널에 대해 하나의 컨트롤러 클래스를 만드는 경우 어떻게 컨트롤러가 서로 통신 할 수 있습니까? 예 : "FilePanel"에서 버튼을 클릭하면 어떻게 "DataPanel"에 통보합니까?

    모범 사례를 알려주시겠습니까?

  • 답변

    4

    패널은 근본적으로 분리되어 있습니까?

    아니요 : 패널 세트는 근본적으로 하나의 상태입니다. 예를 들어, 패널은 통제중인 동일한 항목의 여러 측면을 보여주는 콘솔을 나타냅니다. 사용자가 항목을 선택하면 다른 모든 패널이 업데이트되어 항목의보기가 표시됩니다. 이 경우 하나의 컨트롤러로 충분합니다.

    예 : 각각 다른 상태로 이동할 수 있습니까? 이것은 "포탈 (Portal)"스타일 애플리케이션에서 가질 수있는 일종의 실재입니다. 사용자는 각 Panel에서 매우 독립적으로 작업 할 수 있습니다. 예를 들어 하나의 전체 뷰어에서 두 개의 별도 side-by-side 브라우저 창을 사용할 수 있습니다. 이것은 사용자가 다른 백엔드 시스템에서 열린 윈도우를 가지고있는 복합 애플리케이션에서 얻는 효과입니다. 때때로 한 창에서의 사용자 조치로 인해 다른 창에서 일이 발생하지만 일반적으로는 개별적으로 실행됩니다. 이 경우 우리는 각각 Panel의 상태를 담당하는 별도의 컨트롤러를 가질 수 있습니다. 이벤트 처리 메커니즘으로 서로 통신 할 수 있습니다. 사용자가 파일 패널에서 클릭하고보기가 통제 된 연락처를 클릭하면 파일의 ID 인 페이로드가있는 "선택된 파일"이벤트가 발행됩니다. "클릭"이벤트는 비 사용자 이벤트로 변환됩니다.

    별도의 컨트롤러를 사용함으로써 현재 패널 세트의 세부 사항을 분리합니다. 새 패널을 추가하려면 새 컨트롤러가 이벤트를 등록해야합니다.

    +0

    감사합니다. 내 결정이 명확 해집니다. 내 경우에는 한 명의 컨트롤러가 충분해야한다고 생각합니다. – Ham