Подтвердить что ты не робот

Что использовать? MVC, MVP или MVVM или...?

Я запустил проект Java для разработки настольного приложения. Что использовать в качестве шаблона слоя представления (MVC, MVP, MVVM или....)?

... если это возможно, с некоторым рабочим небольшим примером...: -)

4b9b3361

Ответ 1

На самом деле, конечная должность, которую вы ищете, это этот ответ этот ответ от Karsten Lentzsch (от JGoodies fame) в Ракурсы Swing и лучшие практики Swing Frameworks and Best Practices.

Здравствуйте,

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

Я бы сказал, что для Swing нет доступных "лучших практик". А также Я сомневаюсь, что любой может обеспечить "лучшие" практики, поскольку это требуют обсуждения среди разработчиков Swing и поставщиков решений о подходах, что хорошо работает технически и что легко понимать и работать. Кроме того, лучшие практики объяснят, кто может достичь качества результата, и они будут описывать производство затраты времени и производства; но я никогда не мог найти эту информацию онлайн или в книге Swing.

По-моему, отсутствие хорошей практики и информации о том, как строить приложение Swing - это самое большое препятствие, с которым сталкиваются разработчики, начиная с Качели. Большинство разработчиков, с которыми я работал, медленно искали дизайн, реализации макетов, панелей зданий, привязки данных, обработки событий, и расположение различных частей кода и слоев кода. И многие Свинг приложения, которые я видел, сосут; помимо их плохого визуального дизайна, они трудно понять, и даже небольшие изменения стоят много. типично разработчики не имели понятия, где поставить какой код?, как разделить проблемы?, как связать вещи вместе?, как работать с Actions?, how запустить приложение?, и как сохранить и восстановить состояние пользовательского интерфейса? Наиболее разработчикам не хватает руководящих принципов.

Но я обнаружил, что средний разработчик может хорошо работать с Swing, если только взятой рукой - примерно через 3-10 дней. Почти все ваши ответы на вопросы или ответы на них можно получить с помощью кода, библиотек, архитектуры приложений, шаблонов, общих методов программирования, хорошо продуманные примеры, учебные пособия и т.д. Я преподаю разработку Swing процесс, построенный вокруг трехуровневой архитектуры, которая разделяет домена, инструмента и презентации, и это основано на продуктивном макет системы. Несмотря на то, что большинство частей выполняются программно разработчики быстро получают результаты, а также код и визуальный дизайн становится вполне последовательным. Это может повысить производительность разработчика лот - в той мере, в какой работа Swing занимает значительно меньше часть проектной работы.

Так что вы можете сделать? Я настоятельно рекомендую изучить Мартина Фаулера проект для дальнейших "Шаблонов архитектуры корпоративных приложений". Я обнаружил, что эти шаблоны работают очень хорошо с Swing and Swing команды - даже для разработчиков, которые являются новыми для Swing и Swing архитектура. Сначала я бы выбрал следующие шаблоны: "Презентация Model", "Separated Domain" и "Separated Presentation". Я лично одобрить модель представления (модель приложения для Smalltalkers), над шаблоном Model-View-Presenter (MVP). Однако MVP является истинным и хорошо изученная альтернатива.

Паттерны Фаулера могут быть объединены с архитектурой уровня 3-клиент который хорошо масштабируется для умеренно больших приложений Swing. Он состоит доменного уровня, уровня представления и промежуточного слоя модели. Я описал эту архитектуру в своей презентации привязки данных. Приложения на основе MVP также могут быть структурированы в этих трех клиентских ярусах.

Ключевой задачей для приложений Swing является привязка данных: как подключиться объектов домена и свойств объекта домена компонентам Swing. В основном вы можете копировать свои данные взад и вперед или создавать цепочки адаптеры от ваших доменных объектов к компонентам пользовательского интерфейса. Копирование подход легко понять и часто первый выбор для тех которые являются новыми для Swing или привязки данных; Я бы сказал, что это хороший выбор. С другой стороны, копирование значительно затрудняет синхронизацию представлений. Цепи адаптеров и автоматические или полуавтоматические обновления могут значительно сократить количество кода, необходимого для привязки данных домена к пользовательскому интерфейсу. Недостатком является то, что этот подход намного сложнее Понимаю. Как вы уже указали, Swing не дает большой абстракции для многоразовой и гибкой модели, которая может использоваться для привязки текста поля; интерфейс документа не подходит для общих данных доступ. Есть несколько доступных библиотек, которые предоставляют ValueModel интерфейс, который просто предназначен для добавления общего, мощного и гибкая модель для однозначных данных: строки, булевы, числа, даты и т.д.

Я не знаю книги Swing, которая объясняет истинное приложение Swing процесс развития. В идеале такая книга объединила бы узоры, архитектуры и методов привязки данных, упомянутых выше, и описать, как реализовать его в Swing. Во всяком случае, там 10-летний документация для процесса разработки приложений Smalltalk, который делает именно это. Архитектура и документация Oracle JClient не это полное, но может быть проще читать для разработчиков Java. Я предоставляю презентация о привязке данных, которая касается шаблонов Фаулера, 3-уровневая архитектура и реализация Swing для этих моделей и автоматическое связывание данных. Источники учебников моей библиотеки привязки может помочь вам познакомиться с цепочками адаптеров и ValueModel интерфейс. Лучшая документация для шаблона MVP может быть найдена в Dolphin Smalltalk docs.

Как только вы выбрали свою архитектуру и набор шаблонов рабочего стола, вы следует рассмотреть следующие более простые задачи Swing: 1) улучшить внешний вид, выбирая набор профессиональных взглядов и чувств для вашей целевой платформы, 2) выберите систему макета, которая поможет вам быстро создавать хорошо разработанные и согласованные экраны, 3) выбирать данные решение для проверки и 4) возьмите пакет решений для повседневной Swing задачи.

Есть несколько проектов, которые описывают архитектуру Swing, адрес привязки данных и типичные задачи Swing, например: Sun JDNC, Oracle JClient/ADF, Spring RCP, платформа NetBeans. я предоставить коммерческий пакет решений Swing, основанный на библиотеки JGoodies с открытым исходным кодом и добавляет пакет решений и источников для всех публичных инструментов и демонстраций JGoodies. Эти источники предназначены для объясните, как связать все проблемы, упомянутые выше.

Позвольте мне добавить стандартное предупреждение о так называемых "MVC" фреймах. свинг не использует MVC, он использует измененный шаблон. MVC часто неправильно истолкованный и неправильно понятый - особенно в контексте Свинг. Кроме того, MVC хорош для компонентов пользовательского интерфейса, а не для приложений. Следовательно, я рекомендовать искать концепции, решения и библиотеки, которые отражают и работать с архитектурой Swing, а не MVC.

Сообщество изобретателя шаблона MVC представило ApplicationModel (теперь известная как модель представления) около 1993 года; MVP последовали чуть позже. По-моему, эти два шаблона намного больше полезно для Swing, чем MVC. В последнее время Модель представления модели для более широкой аудитории перешла к новой архитектура: "Поллок". Заинтересованные читатели могут google посмотреть, как это отличается от адапторных цепей, которые часто сочетаются с Модели презентаций.

И последнее, но не менее важное - личное выражение. Я могу работать намного лучше с Swing, чем с другими инструментами или фреймворками, которые я использовал раньше; я могу сделать более с меньшим кодом, код лучше структурирован, проще поддерживайте, и я быстро получаю результаты.

Надеюсь, это поможет. С уважением, Карстен Ленцх

Ссылки: дальнейшие шаблоны Фаулера - http://martinfowler.com/eaaDevПредставление привязки данных - http://www.jgoodies.com/articles/Процесс создания приложения Smalltalk - http://www.cincom.com/downloads/pdf/AppDevGuide.pdfШаблон MVP документация - http://www.object-arts.com/EducationCentre/Patterns/MVP.htm Sun JDNC project home - http://jdnc.dev.java.net/ Oracle ADF FAQ - http://www.oracle.com/technology/products/jdev/htdocs/905/adffaq_otn.html Spring Проект проекта RCP - http://www.springframework.org/spring-rcp.html Домашняя платформа NetBeans - http://www.netbeans.org/products/platform/ JGoodies Swing Suite - http://www.jgoodies.com/products/index.html

Если вы не знаете Карстена и JGoodies, тогда поверьте мне, этот парень действительно знает, о чем он говорит. Я настоятельно рекомендую внимательно прочитать его ответ и материал, который он разместил в качестве ссылки. В частности, обязательно проверьте его "Образцы рабочего стола" и "Презентация привязки данных". Удивительно, но я предпочитаю старую версию новый.

Позвольте мне процитировать его слайд о MVC vs MVP:

  • Да, Swing использует расширенную форму MVC внутри
  • Но MVC для компонентов, MVP для приложений

И затем из резюме:

удаp >

Но я не могу сделать лучше, чем Карстен, объясняя это, я могу в лучшем случае перефразировать его. Так что просто прочитайте его!

Также возможно посмотрите Настольные Java-демонстрации для обучения (точнее Скотт Вайолет answer).

Ответ 2

Вот статья, в которой сравниваются три шаблона GUI в Java, используемые для реализации одного и того же экрана три раза:

Внедрение управляемых событиями графических интерфейсов GUI с использованием платформы ZA Java AJAX, Саймона Масси, Сачина К. Махаджана

Так как разные фреймворки и языки имеют небольшие вариации в отношении того, что люди чувствуют, это MVP, MVC, MVVM и MVVMP и т.д. и т.д., в статье осторожно обращается к шаблонам по длинным именам, данным Мартином Фаулером, а не с короткой рукой M__, которые являются легко спорить.

Очевидно, что ZK - это веб-среда или мобильная настольная среда программирования, но шаблоны в равной степени применимы к Swing или другой инфраструктуре живого клиента. Однако без хорошей структуры привязки данных для определенной среды рабочего стола не представляется возможным попробовать MVVM. Следовательно, в этом раннем представлении шаблону "Модель представления" предоставляется прозвище "MVB" для Model-View-Binder в качестве альтернативы называть его "MVVM":

Шаблоны проектирования в ZK: Java MVVM как Model-View-Binder, Simon Massey

Ответ 3

Вы можете взглянуть на в этой статье: Hello ZK MVVM. ZK поддерживает MVP и MVVM, и эта статья может предоставить некоторые идеи для вашего выбора - модель программирования похожа на Swing, считая, что это веб-инфраструктура.

Ответ 4

Я также рекомендую вам использовать Google, чтобы найти больше информации, так как ваш вопрос действительно расплывчатый. Во всяком случае, поскольку вы хотите сделать свое настольное приложение на Java, и вы, вероятно, будете использовать Swing, я просто хочу указать, что Swing разработан с учетом шаблона MVC. В любом случае вы можете легко изменить его в MVP с помощью некоторых дополнительных интерфейсов.

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

Мои 2 цента.