Шаблон MVC: что лучше? Чтобы представления или контроллеры создавали и ссылались на другие?


Мы делаем довольно большое приложение Swing, которое должно реализовать шаблон MVC. В настоящее время приложение выглядит следующим образом:


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

Там есть также довольно много контроллеров, которые полностью отделены друг от друга. Каждый контроллер принадлежит к виду. Каждое представление создает свой собственный контроллер и добавляет контроллер в качестве прослушивателя к входным данным пользователя. Контроллеры получают события из представлений и затем изменяют модель с помощью статических методов моделей. Когда представления посылают события, которые не влияют на модель, а только влияют взгляды, взгляды заботятся об этих событиях сами - не информируя контролеров о том, что они могут быть сделаны. события. То есть контроллеры полностью не осознают представления, и цель контроллеров-только заботиться о манипулировании моделью. / EDIT: контроллеры в настоящее время являются приложениями к своим представлениям; они содержат только логику обработки событий. То есть контроллеры сами по себе не являются компонентами и не содержат компонентов. Они реализуются таким же образом, как и в следующем примере: MVC example |

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


В этом примере представления владеют контроллерами. Было бы лучше в общем случае, если бы контроллеры владели и создавали представления, и если бы кто-то позволил представлениям не знать контроллеров, а не наоборот? В таком случае, почему? Как бы это было задумано? Если нет, то есть ли лучший дизайн, в котором контроллеры все еще не знают о представлениях? Или, возможно, есть лучший дизайн ни у одного из них?

Редактировать:

Как указано в оригинальном определении MVC:

Строка " вид берет на себя ответственность за установление этой взаимосвязи..." по-видимому, это указывает на то, что представление создает контроллер или, по крайней мере, имеет начальную ссылку на контроллер, а не наоборот.

Так что это, по крайней мере, возможный способ сделать это (это допустимый шаблон MVC), но главный вопрос остается; что лучше, и как бы как выглядит лучший дизайн? Особенно при работе со многими контроллерами, которые тесно связаны с их респективными взгляды?

EDIT: Другой пример представления, которое ссылается на контроллер: пример оракулов

1 11

1 ответ:

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