Как правильно реализовать MVC в Java с помощью Swing?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать или обратитесь к последним строкам этого вопроса. Я уже много читал и чувствую, что превращаю что-то простое во что-то сложное, и я все еще застреваю здесь и там, поэтому, возможно, вы можете помочь мне в этих очень конкретных моментах.

Я использую Netbeans IDE 7 и JDK 7 и никаких фреймворков. Первое окно — это JFrame, а все остальные окна — это JDialogs с modal=true.

Вопросы:

  1. Как мне правильно реализовать шаблон MVC со свингом? Из представленных ниже идей какой из них лучше: (А) или (Б)? Или, может быть, другой... Почему он лучше?

    (А) Основное:

    Модель MyModel
    Представление MyView (модель)
    

    MyView:

    MyController(это, модель)
    

    (Б)
    Основное:

    Модель MyModel
    Мой вид
    Контроллер MyController (представление, модель)
    
  2. Когда я нажимаю кнопку jbutton1 в MainFrame, мне нужно открыть SettingsFrame для редактирования настроек. где я должен создать экземпляр представления, модели и контроллера SettingsFrame? В контроллере мейнфрейма?

  3. С точки зрения организации и реализации MVC, как я должен обращаться с более специфическими функциями, которым (очевидно) не хватает одной или двух «ветвей» MVC (будь то Модель, Представление или Контроллер)? Должен ли я создавать для них пустые классы?

    а. Реализация TrayIcon
    б.Класс подключения URL (HttpsUrlConnection, который будет обновлять данные в основном jframe, а также загружать/загружать файлы)
    в. Монитор каталогов (который будет обновлять данные в основном jframe, а также использовать URL-адрес для загрузки файла)
    д. Моя собственная реализация TableModel
    е. json
    
  4. Как правильно сохранить и использовать объект с настройками во всем приложении? Мне понадобится эта информация в разных местах (представления, модели, контроллеры), но она может быть изменена пользователем во время выполнения). Это хорошая идея сделать эту модель синглтоном?

  5. Что делать, если:

    a. Представлению нужны данные из модели?
    Что я делаю: использую ссылку на модель, которую я храню в представлении.
    б. Представлению нужны данные от контроллера?
    Что я делаю: использую ссылку на контроллер, которую я храню в представлении.
    в. Модели нужны данные от контроллера?
    Все еще не произошло, но я понятия не имею, как сделать правильно
    д. Модели нужны данные из представления?
    Что я делаю: рву все волосы с головы...
    е. Контроллеру нужны данные из представления?
    Что я делаю: использую ссылку на представление, которое я храню в контроллере.
    ф. Контроллеру нужны данные из модели?
    Что я делаю: использую ссылку на модель, которую храню в контроллере.
    грамм. Одному из FooModel, FooView или FooController нужны данные из одного из BarModel, BarView или BarController?
    Чем занимаюсь: думаю прыгнуть с самого высокого здания...
  6. Любые подсказки о том, как узнать, правильно ли я реализовал MVC? Должен ли я обрабатывать массивные данные в модели или контроллере?

  7. Я также использую DAO, вот что я делаю: моя модель имеет метод

    ArrayList MyModel load()

    , который создает экземпляр DAO и возвращает список моделей ArrayList, возвращенный DAO, а затем иногда я обрабатываю этот ArrayList of Models в модели, а иногда разрешаю контроллеру обрабатывать его. Это хорошая практика или есть лучший способ? Под процессом я подразумеваю: перебирать ArrayList и получать данные из моделей.

  8. У меня есть диалоговое окно PasswordCheck для ограничения доступа к некоторым представлениям. Как я могу повторно использовать его с точки зрения MVC, чтобы я мог использовать один и тот же диалог PasswordCheck для разрешения/ограничения доступа к различным представлениям, не создавая беспорядка в коде?

  9. Есть еще советы, подсказки, идеи, предложения?

Контекст: Мне нужно разработать программное обеспечение Java Swing MVC в короткие сроки, хотя по умолчанию я не являюсь разработчиком Java и не так привык реализовывать шаблон MVC, особенно в Java (я понял идею, но иногда мне не хватает знаний для реализации отношений между классами). Приложения в основном представляют собой монитор для локальных/онлайн-файлов с JTable в основном фрейме для отображения этих данных. Я использую новый API WatchService для отслеживания локальных файлов и сохранения их информации в базе данных h2 с помощью DAO, а затем перезагружаю эти данные в jtable основного фрейма. Я также должен уведомлять пользователя о новых файлах (для чего я использую TrayIcon). Для онлайн-мониторинга/загрузки/выгрузки файлов я использую HttpsUrlConnection и json.Это также может разрешить настройку параметров.

Заранее благодарим за потраченное время и помощь.

15
задан dcr 7 June 2012 в 13:34
поделиться