Как правильно реализовать MVC в Java с Swing?
Если вы хотите получить более подробную информацию, пожалуйста, дайте мне знать или обратитесь к последним строкам этого вопроса. Я уже много читал, и я чувствую, что превращаю что-то просто в нечто сложное, и я все еще застрял здесь и там, поэтому, может быть, вы можете помочь мне в этих очень конкретных вопросах.
Я использую Netbeans IDE 7 и JDK 7, и никаких фреймворков. Первое окно - это JFrame, а все остальные окна - JDialogs с modal = true.
Вопросы:
-
Как правильно реализовать шаблон MVC с помощью swing?
Из идей ниже Какой из них лучше: (A) или (B)? Или, может быть, еще один... Почему это лучше?
(А)
Главная:
MyModel model
MyView view(model)
MyView:
MyController(this, model)
(В)
Main:
MyModel model
MyView View
MyController controller(view, model)
-
когда я нажимаю jbutton1 в MainFrame, мне нужно его, чтобы открыть SettingsFrame для редактирования настроек. где я должен создавать экземпляр View, Model и Controller для параметра SettingsFrame? В контроллере MainFrame?
-
С точки зрения организации и реализации MVC, как мне обращаться с более конкретными функциями, которые (по-видимому) не хватает одной или двух из "ножек" MVC (либо Model, либо View или Controller)? Должен ли я создавать для них пустые классы?
a. The implementation of a TrayIcon
b. A URL connection class (an HttpsUrlConnection which will update data in the main jframe and also upload/download files)
c. A Directory Monitor (which will update data in the main jframe and also use the urlconnection to download a file)
d. My own implementation of TableModel
e. json
-
Как правильно сохранить и использовать объект с настройками через все приложение? Мне понадобится информация в разных местах (Views, Models, Controllers), но она может быть изменена пользователем во время выполнения). Является ли хорошей идеей сделать эту модель одиночной?
-
Что делать, если:
a. View needs some data from the Model?
What I'm doing: using the reference of Model which I keep in the View
b. View needs some data from the Controller?
What I'm doing: using the reference of Controller which I keep in the View
c. Model needs some data from the Controller?
Still didn't happen but I have no idea how to do correctly
d. Model needs some data from the View?
What I'm doing: pulling all my hair from my head...
e. Controller needs some data from the View?
What I'm doing: using the reference of the View which I keep in the Controller
f. Controller needs some data from the Model?
What I'm doing: using the reference of the Model which I keep in the Controller
g. One of FooModel, FooView or FooController needs data from one of BarModel, BarView or BarController?
What I'm doing: thinking of jumping from the highest building...
-
Любые подсказки о том, как узнать, правильно ли я реализовал MVC? Должен ли я обрабатывать массивные данные в модели или контроллере?
-
Я также использую DAO, что я делаю: моя модель имеет
ArrayList MyModel load()
который создает экземпляр DAO и возвращает ArrayList моделей, возвращаемых DAO, а затем иногда я обрабатываю этот ArrayList моделей в модели, и иногда я разрешаю контроллеру обрабатывать его. Это хорошая практика или есть лучший способ? Под процессом я имею в виду: итерацию через ArrayList и получение данных из моделей.
-
У меня есть проверка пароля jDialog, чтобы ограничить доступ к некоторым представлениям. Как я могу повторно использовать его с точки зрения MVC, чтобы я мог использовать тот же диалог PasswordCheck, чтобы разрешать/ограничивать доступ к различным представлениям, не делая беспорядок в коде?
-
Любые другие советы, подсказки, идеи, предложения?
Контекст:
Я должен разработать программное обеспечение Java Swing MVC за короткое время, хотя по умолчанию я не являюсь разработчиком Java и не так привык к реализации шаблона MVC, особенно на Java (я получаю эту идею, но иногда мне не хватает знаний для реализации взаимосвязи между классами).
Приложения - это, в основном, монитор для локальных/онлайн файлов с JTable в главном фрейме для отображения этих данных. Я использую новый WatchService API для отслеживания локальных файлов и сохранения их информации в базе данных h2 с помощью DAO, и они перезагружают эти данные в главном фрейме jtable. Я также должен уведомить пользователя о новых файлах (для которых я использую TrayIcon). Для онлайн-мониторинга файлов/загрузки/загрузки я использую HttpsUrlConnection и json. Он также может разрешить настройку настроек.
Заранее благодарим за вас время и помощь.
Ответы
Ответ 1
Посмотрите предложения Sun (Oracle).
В качестве одного упрощения вы можете зарегистрировать каждый компонент (модель, представление, контроллер) с помощью компонента приложения верхнего уровня, чтобы обеспечить единую точку отсчета, а не отдельные ссылки между каждым компонентом (ваши A или B). В статье, которую я цитирую, представлены идеи для создания push и pull; Я бы рекомендовал толчок как более популярный современный подход. Раскрытие информации: у меня есть опыт работы с Java и MVC, но не MVC в Swing как таковой.
где мне следует создать экземпляр представления, модели и контроллера SettingsFrame?
Конечно, да или в компоненте приложения верхнего уровня.
как я должен обрабатывать более конкретные функции, которые (по-видимому) не хватает или две из "ножек" MVC (либо Модель, либо Вид или Контроллер)?
Я бы использовал GUI-объекты только как свою собственную графическую библиотеку. И чисто алгоритм/сервисные части как библиотека сервисов.
Должен ли я обрабатывать массивные данные в модели или контроллере?
Алгоритмы обработки данных будут хорошо вписываться в контроллер или даже в библиотеку обслуживания; ваша модель не должна много обрабатывать, кроме, возможно, преобразования или проверки типов данных.
Как правильно сохранить и использовать объект с настройками через все приложение?
См. мою записку о регистрации; может быть целесообразным однострочный.