В отличие от 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. Дополнительная сложность не делает этот инструмент более необходимым.
Мое мнение таково, что лучшей архитектурой является использование двух веб-приложений, одного клиента и одного сервера.Сервер представляет собой простое облегченное универсальное Java-приложение, использующее библиотеку servlet.jar.Клиент GWT.Вы делаете RESTful-запрос через GWT-RPC на стороне сервера клиентского веб-приложения.Серверная часть клиента - это всего лишь проход по клиенту apache http, который использует постоянный туннель в обработчик запросов, который вы используете как отдельный сервлет в веб-приложении сервлета сервера.Веб-приложение сервлета должно содержать уровень приложения базы данных (hibernate, cayenne, sql и т. Д.). Это позволяет полностью отделить объектные модели базы данных от реального клиента, предоставляя гораздо более расширяемый и надежный способ разработки и модульного тестирования вашего приложения.Конечно, это требует немного начального времени установки, но в конце позволяет вам создать динамическую фабрику запросов, находящуюся вне GWT.Это позволяет вам использовать лучшее из обоих миров.Не говоря уже о возможности тестирования и внесения изменений на стороне сервера без необходимости компиляции или сборки клиента gwt.