Что использовать? MVC, MVP или MVVM или ...? - PullRequest
36 голосов
/ 21 января 2010

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

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

Ответы [ 4 ]

51 голосов
/ 21 января 2010

На самом деле, конечный пост, который вы ищете: этот ответ этот ответ от Karsten Lentzsch (из известности JGoodies) в Swing Framework и Best Practices Swing Frameworks и Best Practices thread.

Hello

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

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

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

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

Так что вы можете сделать? Я настоятельно рекомендую изучить Мартина Фаулера проект для дальнейшего "Шаблоны архитектуры приложений предприятия". Я обнаружил, что эти шаблоны очень хорошо работают с Swing и Swing команды - даже для разработчиков, которые являются новыми для Swing и Swing архитектура. Сначала я выбрал бы следующие шаблоны: «Презентация Модель »,« Разделенный домен »и« Разделенная презентация ». Я лично одобрить модель представления (модель приложения для пользователей, говорящих по-мелкому), поверх шаблона модель-представление-презентатор (MVP). Тем не менее, MVP является истинным и хорошо изученная альтернатива.

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

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

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

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

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

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

Сообщество изобретателей шаблона MVC представило ApplicationModel (теперь известный как Presentation Model) около 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 / Шаблоны / MVP.htm JDNC от Sun Домашняя страница проекта - http://jdnc.dev.java.net/ FAQ по АПД Oracle - http://www.oracle.com/technology/products/jdev/htdocs/905/adffaq_otn.html Весенний проект RCP home - http://www.springframework.org/spring-rcp.html Домашняя страница платформы NetBeans - http://www.netbeans.org/products/platform/ JGoodies Swing Suite - http://www.jgoodies.com/products/index.html

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

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

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

А потом из резюме:

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

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

3 голосов
/ 09 сентября 2012

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

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

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

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

Проектирование шаблонов в ZK: Java MVVM в качестве связующего лица модели, Саймон Мэсси

1 голос
/ 09 декабря 2011

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

0 голосов
/ 21 января 2010

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

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

Мои 2 цента.

...