Java, Swing, MVC 및 SwingWorker에 대해 많이 읽었지 만 MVC에서 모델의 역할에 대해 완전히 혼란스러워합니다.MVC에서 모델은 무엇을하고 SwingWorker와 어떤 관계가 있습니까?
- 파일 선택
- 읽기 파일
로깅에 사용되는 텍스트 상자도 있습니다 :
나는 두 개의 버튼이있는 응용 프로그램을 짓고 있어요.
내가 현재하고 있어요 :
이- 보기는 위젯하지만 논리
- 버튼의의 actionPerformed() 메소드 컨트롤러에 대한 메서드 호출을 포함
- (필요한 데이터를 가져 오는 것입니다 컨트롤러 파일 가져 오기를위한 OptionPane.showOpenDialog() 포함)
- 파일 참조는 모델에 저장됩니다.
- 모델은 새 파일의보기를 (PropertyChangeSupport, Observer 패턴) 알립니다.
- 보기는 '읽기 파일'버튼을 수
내 첫 번째 질문 : 나는 모델의 상태를 저장해야합니까? 즉, 작업 순서와 관련된 정보 : 먼저 파일을 선택해야 읽을 수 있습니다. 그래서 제 모델은 상태 기계가 될 것입니다.
내 두 번째 질문 : 컨트롤러에 OptionPane이 표시되도록하는 것이 맞습니까?
그러면 즐거움이 시작됩니다. 사용자가 '파일 읽기'버튼을 클릭합니다. '파일 선택'버튼과 거의 비슷하게 작업하고 있습니다. 뷰는 컨트롤러를 호출하지만 컨트롤러는 SwingWorker를 사용하여 파일을 읽습니다. EDT에서는 수행하지 않아야합니다. SwingWorker는 View (SwingWorker.process() 메서드)에 대한 참조를 통해 텍스트 상자에 추가되는 중간 로깅 메시지를 게시합니다. 컨트롤러는 SwingWorker에서 '상태'속성 변경을 수신 대기합니다. 'state'가 'DONE'일 때 컨트롤러는 'get()'함수를 호출합니다. 모든 것이 정상이면 결과가 모델에 설정됩니다. 그렇지 않은 경우 예외가 처리됩니다.
제 3의 가장 중요한 질문 : 모델에서 파일을 읽지 않아야합니까?! MVC의 모든 포인트는 모든 이점 (테스트 가능성 등)과 관심사의 분리입니다. 새보기 (예 : CLI)를 원하면 어떻게해야합니까? 그러면 내 모델은 이제 데이터 모델이 될 것입니다. 파일을 읽는 방법에 대한 단서가 없습니다! 그리고 스레딩 문제는 어떻습니까?
희망을 갖고 나에게 좋은 조언을 해줄 수 있기를 바랍니다. SwingWorker, MVC 등 인터넷에 대한 예제가 많이 있습니다.하지만 제 문제는 코드 작성 방법이 아니라 디자인 방법입니다.
MVC와 스윙에서 본 가장 간결한 게시물 중 하나입니다 - 감사합니다! –