다른 조치에서 행동을 호출하는 방법은 무엇입니까? (만약 그게 현명하다면)

StackOverflow https://stackoverflow.com/questions/2205945

문제

ActionListeners를 사용하여 액션 클래스로 스윙 애플리케이션을 리팩터링하려고합니다. 많은 메뉴 항목이 도구 모음에서도 많이 사용될 것이라는 것을 깨달았습니다.

지금 당장 나는 수업이 있습니다 ImportExport 기본 모델의 상태를 다루고 적절한 사용자 대화 상자를 표시합니다. ImportExport 기능이 있습니다 save(), saveAs() 그리고 open(). 사용자가 "열기"메뉴 항목을 클릭하면 조치 리스너가 호출합니다. open(), open() 먼저 모델에 변경 사항이 있는지 확인하고 경우에 따라 사용자에게 먼저 저장할 것인지 묻는 대화 상자가 표시됩니다. 이제 사용자가 "예"를 클릭하면 open() 전화 save() 다시 수표를 수행하고 사용자 대화 상자를 표시합니다. save() 이 조치에서 벗어날 수있는 유일한 방법은 성공적으로 저장하거나 사용자가 취소하려고 결정하는 것입니다. 나는 그 의견에 강력하게 의존합니다 save() 제공하고 사용자가 취소하려면 전화를 취소합니다. open() 기능.

나는 분할하고 싶었다 ImportExport 세 가지 클래스로 클래스 (OpenAction, SaveAction & SaveAsAction), 그들 각각은 서브 클래싱 AbstractAction 그리고 결국 제거합니다 ImportExport 수업. 그리고 이것은 내 문제가 발생하는 곳입니다. SaveAction 다른 모델을 열기 전에 사용자가 모델을 저장하려는 경우 실행하려면? 사용자가 취소하기로 결정하면 피드백을 얻으려면 어떻게해야합니까?

이것이 올바른 접근법입니까? 저장 및 오픈 동작에 복제 된 코드를 사용하는 것을 좋아하지 않으며 이미 기본 모델에 최대한 많은 기능을 배치했지만 사용자 대화 상자는 옵션이 아니므로 옵션이 아닙니다. 였다 Action 이런 종류의 기능을 유지하도록 설계되거나 ImportExport 클래스 및 간단히 모든 조치 호출을 적절한 기능으로 위임합니다. ImportExport. 어떻게 사용합니까? Actions?

도움이 되었습니까?

해결책

의사 결정 트리가있을 때 '컨트롤러'작업을 추가합니다. 개방, 저장 및 저장은이 컨트롤러 동작을 서브 클래스합니다. 컨트롤러 동작은 모델의 상태를 결정하고 적절한 경우 사용자에게 추가 정보를 요청한 다음 올바른 서브 클래스를 호출합니다.

다른 팁

나는 만들 것이다 ImportExportController 수업, 이러한 방법을 갖는다 : open, save, saveAs. 이 컨트롤러는 비즈니스 논리를 알고 있습니다.

나의 Action 수업에는 많은 비즈니스 논리가 포함되지 않습니다. 그들은 컨트롤러 만 호출 할 것입니다.

그러나 이러한 동작에는 모든 레이블, 아이콘, 가속기가 포함되어 있습니다. JButton, JMenuItem, 등.

나를 위한, Actions GUI 지향 클래스는 편의에 사용되지만 (매우 편리합니다!) 비즈니스 로직을 처리하기위한 클래스는 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top