2012-06-07 2 views
15

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

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

Вопросы:

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

    (A) Main:

    MyModel model 
    MyView view(model) 
    

    MyView:

    MyController(this, model) 
    

    (B)
    Main:

    MyModel model 
    MyView View 
    MyController controller(view, model) 
    
  2. , когда я нажимаю jButton1 в MainFrame мне это нужно , чтобы открыть SettingsFrame для редактирования настроек , где я должен создавать экземпляр View, Model и Controller для параметра SettingsFrame? В контроллере MainFrame?

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

    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 
    
  4. Как правильно сохранить и использовать объект с настройками через все приложение? Мне нужна его информация в разных местах (Views, Models, Controllers), но она может быть изменена пользователем во время выполнения). Это хорошая идея сделать эту модель синглом?

  5. Что я должен делать, когда:

    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... 
    
  6. Любые намеки о том, как знать, если я правильно реализовать MVC? Должен ли я обрабатывать массивные данные в модели или контроллере?

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

    ArrayList MyModel нагрузки()

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

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

  9. Другие советы, подсказки, идеи, предложения?

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

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

ответ

7

Посмотрите на Sun's (Oracle's) suggestions.

В качестве одного упрощения вы можете зарегистрировать каждый компонент (модель, представление, контроллер) с помощью компонента приложения верхнего уровня, чтобы обеспечить единую точку отсчета, а не отдельные ссылки между каждым компонентом (ваши A или B). В статье, которую я цитирую, представлены идеи для создания push и pull; Я бы рекомендовал толчок как более популярный современный подход. Раскрытие информации: У меня есть опыт работы с Java и MVC, но не MVC в Swing как таковой.

где я должен создавать экземпляр представления, модели и контроллера SettingsFrame?

Конечно, да или в компоненте приложения верхнего уровня.

как я должен обрабатывать более конкретные функции, которые (очевидно) не хватает одного или два MVC «ноги» (либо модели или вида или контроллера)?

Я бы использовал только GUI-элементы, как свою собственную графическую библиотеку. И чисто алгоритм/сервисные части как библиотека сервисов.

Должен ли я обрабатывать массивные данные в модели или контроллере?

Алгоритмы обработки данных идеально вписываются в контроллер или даже в библиотеку обслуживания; ваша модель не должна выполнять большую обработку, кроме, возможно, преобразования или проверки типов данных.

Как правильно сохранить и использовать объект с настройками через все приложение?

См. Мою записку о регистрации; одноэлемент может быть уместным.

+0

+1, мне нравится идея, представленная так сильно, как мне понравилась ссылка, также поможет мне в моих начинаниях :-) +1 к вопросу, очень хорошо объясненному, я был первым, кто смог продвинуть оба: -) –

+0

Спасибо за ответ. Что вы подразумеваете под «см. Мою записку о регистрации»? Я видел предложение солнца раньше, но, так как вы его рекомендовали, я буду читать его более внимательно и внимательно и попытаюсь решить мои сомнения.Я также поддержал это. – dcr

+4

+1 См. Также этот [пример] (http://stackoverflow.com/a/3072979/230513), который следует за контуром (http://stackoverflow.com/a/2687871/230513), аналогичным диаграмме процитированы. – trashgod

Смежные вопросы