Я думаю, вы в значительной степени на ходу. Чтобы ответить на ваши вопросы по одному:
1. я должен хранить состояние в модели?
да, вы можете и должны сохранять состояние в вашей модели - модель - это состояние и поведение, которые изменяют это состояние.
2. это правильно, что я позволил контроллеру показать OptionPane?
да - дизайн приложения (логический поток) решает, откуда поступает файл - модель, конечно, не заботится о том, как получить имя файла для чтения, просто что она получает имя файла. поток является доменом контроллера.
3. модель не должна читать файлы?
да еще раз, чтение файла является частью модели. Несмотря на то, что контроллер вызывает работника качания, работник качания концептуально является частью модели, по крайней мере, основной логикой, выполняемой работником качания. В идеале вся логика загрузки файла заключается в модельных классах. Контроллер затем может организовать вызов этого с помощью рабочего качания. Контроллер решает, что загрузка файла должна происходить в фоновом потоке, и дает указание модели загрузить файл из фона. Рабочий колебания контроллера получает события прогресса загрузки от модели и обрабатывает их, вызывая publish (), а затем process () обновляет пользовательский интерфейс.
В принципе, вы должны иметь возможность переписать все приложение как консольное приложение без необходимости менять модель. Естественно, представление меняется, но это потому, что теперь он должен представлять модель, используя стандартный вывод, а не Swing. Самые большие изменения происходят в контроллере - поток приложения будет другим (выбор файла происходит из аргументов программы), контроллер больше не слушает нажатия кнопок для прямого потока, но либо имеет фиксированный поток, либо взаимодействует с пользователем через stdin. И модель потоков в контроллере отличается - не нужно беспокоиться о EDT, поэтому не нужно качать работника.
Итак, вы видите, что модель заботится о состоянии и изменяет это состояние, представление заботится о представлении состояния, а контроллер делает все остальное, в частности, подключает модель к представлению.