На відміну від RequestFactory, який має погані можливості обробки помилок та тестування (оскільки він обробляє більшу частину матеріалів під капотом GWT), RPC дозволяє використовувати більш сервісний підхід. RequestFactory реалізує більш сучасний підхід стилю введення залежностей, який може надати корисний підхід, якщо вам потрібно викликати складні поліморфні структури даних. При використанні RPC ваші структури даних повинні бути більш рівними, оскільки це дозволить вашим утилітам для маршалінгу перекладати між вашими json / xml та Java-моделями. Використання RPC також дозволяє впровадити більш надійну архітектуру, як цитується у розділі gwt dev на веб-сайті Google.
"Просте розгортання клієнта / сервера
Перший і найпростіший спосіб думати про визначення сервісів - це розглядати їх як весь задній кінець вашої програми. З цієї точки зору, код на стороні клієнта - це ваш "фронт-енд", а весь сервісний код, який працює на сервері, - "задній кінець". Якщо ви застосуєте такий підхід, ваші реалізації послуг, як правило, будуть більш загальними API, які не є тісно пов'язаними з одним конкретним додатком. Визначення ваших служб, швидше за все, матимуть безпосередній доступ до баз даних через JDBC або Hibernate або навіть до файлів у файловій системі сервера. Для багатьох застосувань такий вигляд є доречним, і він може бути дуже ефективним, оскільки зменшує кількість рівнів.
Багаторівневе розгортання
У більш складних багаторівневих архітектурах визначення ваших служб GWT можуть бути просто полегшеними шлюзами, які здійснюють виклик до серверних середовищ внутрішнього сервера, таких як сервери J2EE. З цієї точки зору ваші послуги можна розглядати як «серверну половину» інтерфейсу користувача вашої програми. Замість того, щоб бути загальними, сервіси створюються для конкретних потреб вашого інтерфейсу користувача. Ваші послуги стають "інтерфейсними" класами "бек-енду", які записуються шляхом зшивання викликів до більш загального фонового рівня служб, реалізованих, наприклад, як кластер серверів J2EE. Цей тип архітектури підходить, якщо вам потрібно, щоб ваші внутрішні служби працювали на фізично окремому комп'ютері від вашого HTTP-сервера. "
Також зверніть увагу, що для налаштування однієї служби RequestFactory потрібно створити близько 6-ти класів Java, де як RPC потрібно лише 3. Більше коду == більше помилок і складності в моїй книзі.
RequestFactory також має трохи більше накладних витрат під час обробки запиту, оскільки він повинен здійснити серіалізацію між проксі-серверами даних та реальними моделями Java. Цей доданий інтерфейс додає додаткові цикли обробки, які дійсно можуть скластися в корпоративному або виробничому середовищі.
Я також не вірю, що послуги RequestFactory є серіалізацією, як послуги RPC.
Загалом, після того, як я вже деякий час використовую обидва, я завжди використовую RPC як його більш легкий, простіший для тестування та налагодження та швидший, ніж використання RequestFactory. Хоча RequestFactory може бути більш елегантним та розширюваним, ніж його частина RPC counter. Додана складність не робить його кращим інструментом необхідним.
На мою думку, найкраща архітектура - це використання двох веб-програм, одного клієнта та одного сервера. Сервер - це простий легкий загальний веб-додаток Java, який використовує бібліотеку servlet.jar. Клієнт - GWT. Ви робите RESTful запит через GWT-RPC на серверній стороні клієнтської веб-програми. Серверна сторона клієнта - це лише пропуск для клієнта apache http, який використовує стійкий тунель у обробнику запитів, який ви запускаєте як єдиний сервлет у веб-програмі сервлету вашого сервера. Веб-додаток сервлета повинен містити рівень програми бази даних (hibernate, cayenne, sql тощо). Це дозволяє повністю розлучити об'єктні моделі бази даних із фактичним клієнтом, забезпечуючи набагато розширюваніший та надійніший спосіб розробки та модульного тестування вашого додатка. Звичайно, це вимагає трохи початкового часу налаштування, але врешті-решт дозволяє створити динамічний завод запитів, що сидить за межами GWT. Це дозволяє використовувати найкраще з обох світів. Не кажучи вже про тестування та внесення змін на стороні сервера без необхідності компіляції або побудови клієнта gwt.