Как Swing вписывается в MVC? - PullRequest
4 голосов
/ 10 июля 2010

В Интернете есть много примеров, когда дело доходит до паттерна MVC с Swing. Однако, кажется, нет простого способа сделать что-либо.

Вот несколько вопросов:

  1. Может ли понятие View быть напрямую связано с такими компонентами Swing, как JFrames?
  2. Аналогично, могут ли существующие классы моделей, которые использует Swing, использоваться в качестве модели или одна базовая модель может быть адаптирована с помощью нескольких классов моделей Swing?
  3. Если ответ на вопрос 2 - да, должны ли эти классы моделей быть централизованы в одном классе (атрибут / составной) или сгруппированы в пакет (один класс на отдельную модель)?
  4. Если классы моделей остаются отдельными, означает ли это, что в типичном приложении может одновременно работать несколько шаблонов MVC?
  5. Является ли обязательным однозначное соответствие между моделью, видом и контроллером или может существовать более одного контроллера / представления для одной данной модели?
  6. Наконец, как можно структурировать приложение, чтобы его было легко поддерживать?

Некоторые ссылки:

Ответы [ 2 ]

4 голосов
/ 10 июля 2010

A JFrame, как и все контейнеры верхнего уровня , обеспечивает отличную реализацию представления;Обычно я использую JPanel для организации JComponent подклассов, которые составляют связанные элементы представления.

Модель должна иметь нет знания о представлении (ях);он уведомляет наблюдателей (слушателей) об изменениях в состоянии, обычно в ответ на вызов его методов.

Приложение может иметь более одной модели, а каждая модель может иметь более одного представления.Сам Swing использует связанную разделяемую модель архитектуры , как описано в Обзор архитектуры Swing .

Вот очень простой пример что вы можете найти поучительным.

2 голосов
/ 10 июля 2010

Эта статья о Java SE Application with MVC, кажется, отвечает на ваш вопрос: http://www.oracle.com/technetwork/articles/javase/index-142890.html

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

Основная идея заключается в разделении вашего кода, чтобы сделать его более гибким и обслуживаемым. Итак, я склонен начинать с того, какими будут мои данные, поэтому сначала я проектирую модель, затем начинаю работать с первым представлением, а затем, когда я работаю над каждым представлением, для этой модели я могу обнаружить, что Мне нужно добавить к моей модели, или сделать ее более общей, чем я изначально. Пока я делаю это, мне приходится работать с контроллером (ами), и в зависимости от сложности у меня может быть несколько контроллеров, вместо того чтобы заставлять один контроллер делать слишком много.

В MVC важен хороший дизайн, поэтому определите, какие представления могут быть разумно использованы вашим дизайном, а также определите модели, которые вам понадобятся для ваших данных. Контроллер просто связывает эти два вместе.

Но вы найдете каркасы, которые используют один главный контроллер, вызывающий другие контроллеры, и это нормально, но найдите проект, который имеет смысл с точки зрения адаптивности и ремонтопригодности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...