Вы пробовали использовать MVC для кода клиента GWT?

Пробовали ли вы использовать MVC или любой другой шаблон пользовательского интерфейса для кода клиента GWT. Каковы подводные камни/преимущества, с которыми вы столкнулись в разных подходах?

Ответ 1

Я думаю, вам нужно рассматривать GWT так же, как и любые другие интерфейсы пользовательского интерфейса, такие как Swing, Cocoa и т.д. Все, что имеет смысл в этих рамках с точки зрения MVC (или других парадигм), имеет смысл и в GWT. Я думаю, что иногда люди слишком сильно воспринимают объект MVC, и мне нравится, как он работает в Cocoa больше, чем в большинстве фреймворков. Вы создаете представление, у вас есть ViewController, который контролирует все поведение представления, а затем у вас есть объекты модели со всеми вашими данными. Я не думаю, что вам нужно быть догматичным о том, где находится вся ваша бизнес-логика, просто нужно быть там, где это имеет смысл.

В терминах ловушек основной, с которой вы столкнетесь, - это то, что GWT - это просто технология переднего конца, поэтому технически задняя часть сидит где-то на сервере. Я не вижу, чтобы это отличалось от написания приложения для качания клиентского сервера, которое хранит данные в облаке где-то. Разница в том, что GWT скомпилирован в javascript и имеет все ограничения для веб-приложения javascript, поэтому будут некоторые вещи, которые вы просто не можете сделать на лицевой стороне. Скажем, например, вы хотите создать PDF файл и показать это пользователю, вы не можете этого сделать в GWT, вам нужно позвонить обратно, чтобы сделать это за вас. С другой стороны, в приложении Swing вы, вероятно, можете использовать itext и делать это на стороне клиента.

Ответ 2

Шаблон MVC для GWT обсуждается в этом question, который также имеет ссылку на этот углубленный сообщение в блоге.

Единственное, что я добавил бы, это то, что код на стороне клиента в целом можно считать "V" в "MVC", что может изменить способ его просмотра. Думая о клиентском коде как свой собственный вложенный компонент MVC, ну, это Java, он объектно ориентирован, поэтому его можно настроить так же, как приложение Swing. Я считаю, что вам выгодно вытаскивать из представления как можно больше кода контроллера, чтобы обрабатывать вещи GWT RPC. Модель иногда более проблематична, потому что вам, возможно, придется решить, хотите ли вы ее на сервере, а не на клиенте. Или создайте прокси модели и т.д.

Ответ 3

http://code.google.com/p/gwt-mvc/ может вам помочь.

Преимущества:

  • легко читаемый контроллер
  • Управление маркерами истории
  • Контроллеры тестируются с помощью JMock (но не GwtTestCase)
  • Иерархический MVC
  • Простое наследование для начала кодирования вашего представления, контроллеров и моделей.

Ответ 4

Вы пробовали GWTruts (http://sourceforge.net/projects/gwtruts/)? Это также среда GWT MVC с открытым исходным кодом, которая разделяет View и Controller в GWT

Ответ 5

Использование своего рода шаблона типа MVC/MVP действительно важно, когда приложения GWT выходят за рамки самого маленького проекта, иначе вы просто теряете контроль над тем, что происходит.

Помимо уже упоминавшегося, есть также реализация GXT MVC, которую я здесь рассмотрел: http://www.bristol-gtug.org/?p=45

Этот разговор в Google IO в прошлом году заставил многих людей задуматься о MVC/MVP на GWT: http://code.google.com/events/io/2009/sessions/GoogleWebToolkitBestPractices.html.

Недавно я заметил, что в документации GWT есть также учебник по архитектуре MVP, который является хорошим началом: http://code.google.com/webtoolkit/doc/latest/tutorial/mvp-architecture.html

Ответ 6

Вы можете взглянуть на JetPad-Mappers, минималистичную среду MVC, разработанную на JetBrains и используемую в нескольких (в настоящее время неизданных) продуктах.

Отказ от ответственности, я участвую в разработке этой структуры.