2013-04-18 2 views
7

Поняв, что я полностью проигнорировал шаблон MVC, я попытался использовать концепцию в приложении с представлением Swing. Теперь я прочитал большинство сообщений по теме MVC с Swing, но я все еще немного смущен, потому что это слишком сложно для меня, и я думаю, что мне нужны некоторые основные разъяснения, поэтому я не ошибаюсь дорожка.MVC и Swing в настольном приложении

Я также задаюсь вопросом, как часто использовать MVC в реальных проектах. Многие онлайн-уроки, похоже, не учитывают контроллер и смешивают его с моделью, в то время как я был смущен возможностями бизнес-логики XSTL: s. Почему вы хотите обратиться к источнику данных из представления JSP?

Этих мыслей в стороне, мой собственно вопрос заключается в следующем:

Если у вас есть компонент Swing, должен прослушиватель событий в этом свинг классе обновление состояния компонента через вызов (? Статический возможно) методу в классе контроллера POJO, который, в свою очередь, получает из модели подходящую бизнес-логику, которая состоит из иерархии классов POJO и связанной с ней персистентности?

+3

Добро пожаловать в гнездо шершней. Swing действительно смешивает парадигму MVC, позволяя виртуализировать VC в один компонент. Хорошее или плохое не имеет значения, так оно и есть. То, что он делает, это попробовать и отделить данные от представления. Есть несколько школ мысли, в которых говорится, что вы должны удалить элемент «контроля» из представления в свой класс, лично я думаю, что это просто увеличивает сложность и предлагает больше проблем, чем это стоит - ИМХО. Вообще говоря, ваш взгляд/контроллер никогда не сможет напрямую изменять данные, это ответственность за модель. IMHO – MadProgrammer

+0

А, спасибо. Это сделало вещи более ясными. Но согласитесь ли вы, что имеет смысл ввести отдельный контроллер, если реализация GUI может измениться (например, на SWT)? Слишком плохо, что я не могу поддержать ваш комментарий - еще нет репутации :) – 2013-04-18 00:35:30

+0

Отдельный контроллер будет иметь смысл только в том случае, если API/фреймворки работают подобным образом, имеют некоторые типы интерфейсов. Тем не менее, если вы пишете свой контроллер, используя тот же парадигм, что и в моделях (т.е. начинайте с интерфейса, переходите к абстрактной реализации, а затем допускайте несколько конкретных реализаций), это выполнимо. Это должно быть считаться балансирующим актом, но, как мне нравится, все абстрагироваться, чтобы реализация не была известна тем, кто ее использует, да, я бы счел это разумной идеей – MadProgrammer

ответ

10

Я работал фрилансером в течение длительного времени, и почти 90% проектов касались Java Swing (настольных приложений). Кроме того, многие проекты включали в себя миграцию с таких языков, как Visual Fox Pro на Java, это было больно, потому что сложная часть не мыслила в логике, которая уже выполнена, тяжелая часть - это код, который является беспорядком и превращает его в красивый код, соответствующий хорошим практикам и использующим шаблоны проектирования, поэтому рекомендуется составить схему или карту в вашем уме, как вы можете отделить свой код от концепций Model, View, Controller.

MVC, как уже упоминалось, поможет вам иметь красивый, удобный и удобный для чтения код, а также следовать парадигме программирования и передовым методам.

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

Контроллер: включает в себя основной или бизнес-логики, которые вы ставите для своего приложения, в этом «слое» вы должны включить функциональность и «как мое приложение достигнет целей?».

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

Применение MVC не так сложно, но, как я уже упоминал, иногда бывает больно, когда вам нужно перенести свой код из структуры неприменимого MVC в структурированное приложение MVC. Легче начать кодирование с помощью MVC.

Способ, которым я привык к этому - с помощью maven и отделить мое приложение на небольшие «модули», конечно, вам не нужно maven, я просто нашел его полезным в тот момент, но в любом случае вы можете попробуйте практиковать или привыкнуть к MVC, отделив ваше приложение от небольших проектов, например:

Java Project 1: модель данных приложения (содержит весь код, связанный с управлением данными: объекты, dtos, beans, daos)

Java Project 2: application-core-controller (содержит всю бизнес-логику и функциональность, здесь вы можете использовать шаблон фасада, если вы хотите сделать свой код более «прозрачным», когда вы соприкасаетесь с вашим видом)

Java Project 3: приложение-вид-Ui (содержит все панели, рамки и графические элементы)

Работая таким образом, помогли мне (и заставил меня), чтобы использовать для разделения моего кода и следить за что действительно важно для проекта, над которым я работаю. Например, если я использую модель данных приложения, я сосредоточен на модели данных, я не думаю о бизнес-логике и графическом интерфейсе.

Длительное объяснение, возможно, кто-то может сделать это лучше, но надеюсь, что я мог бы помочь вам или хотя бы дал вам руку с этим.

С уважением.

+0

Спасибо! Мне нужно некоторое время, чтобы подумать об этом, прежде чем я буду считать, что это принятый ответ. Кажется логичным иметь бизнес-логику в контроллере, но я понял, что это не очень хорошая идея и что она должна быть частью модели. – 2013-05-06 14:44:40

+1

не беспокойтесь, мы здесь, чтобы помочь. Вы упомянули о хорошем моменте, и я согласен с вами, что модель должна содержать некоторую логику, но эта логика должна касаться доступа к данным и объектов, которые вы обрабатываете как DAOS. В контроллере вы можете иметь другие процессы, такие как расчет зарплаты, делегирование ответственности. И, как вы уже писали, контроллер будет использовать модель для управления или отображения данных. Вы можете добавить дополнительные шаблоны, такие как фасад (как я уже упоминал), чтобы отделить немного больше вашей бизнес-логики от вашего представления. –

+1

@MarceloTataje: Итак, когда я сравниваю это с типичным Java-приложением Java, контроллер будет сопоставлен с уровнем Service Layer, Model to DAO и View to Web? Я прошу об этом, так как я буду преобразовывать проект веб-приложения в приложение для Java-приложений. –

3

Елки URL-адрес для базового понимания MVC

http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

Теперь подход к реализации его в Swing-приложений. Не путайте функциональность контроллера с функциональностью слушателей.

  1. Элементы управления и прослушивания пользовательского интерфейса, которые должны быть прикреплены к ним, должны быть определены в классах просмотра.
  2. В любом случае, когда вам нужно вызвать бизнес-логику, вам необходимо вызвать класс контроллера. Как получение некоторого значения из базы данных.
  3. Класс контроллера должен поговорить с вашей моделью, чтобы получить данные и обработать их, если потребуется.
  4. Модельные классы должны работать с данными.

Идея использования MVC заключается в уменьшении избыточного кода и более управляемого кода. Поэтому, если вы выполняете некоторые вычисления/манипуляции, их можно перенести на контроллеры. Контроллеры могут быть вызваны из разных представлений, требующих того же материала. Аналогичным образом модель может использоваться несколькими контроллерами для извлечения данных.

+0

Я подозреваю, что это то, что называется толстым контроллером. Я видел несколько комментариев, говорящих о том, что контроллер должен быть как можно более тонким, поэтому я думаю, что все, что можно было бы обработать в модели, должно быть обработано там. Возможно, я все еще в этом запутанном состоянии, но прочитаю немного раньше, прежде чем принять/отложить ответ. – 2013-05-06 13:58:51

+0

. Не могли бы вы сказать, что следующая линия мышления неверна: «Мы быстро обнаружили, что этот раскол не сработал на практике, поскольку части зрения и контроллера компонента требовали жесткой связи (например, это было очень сложно написать общий контроллер, который не знал специфики представления). Таким образом, мы свернули эти два объекта в единый объект пользовательского интерфейса («http://www.oracle.com/technetwork/java/») architecture-142923.html) – 2013-05-06 14:36:59

+1

Я согласен, что мне трудно достичь чистой модели MVC. Это в основном потому, что оно работает на модели слушателей. Но я все же считаю, что многие коды могут быть перемещены в контроллеры, если не все. Короче, если вы любите MVC, вы должны быть в состоянии выполнить его как можно ближе :-) –

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