Không giống như RequestFactory có khả năng xử lý lỗi và kiểm tra kém (vì nó xử lý hầu hết các nội dung dưới lớp vỏ của GWT), RPC cho phép bạn sử dụng phương pháp tiếp cận theo hướng dịch vụ hơn. RequestFactory triển khai một cách tiếp cận theo kiểu tiêm phụ thuộc hiện đại hơn có thể cung cấp một cách tiếp cận hữu ích nếu bạn cần gọi các cấu trúc dữ liệu đa hình phức tạp. Khi sử dụng RPC, cấu trúc dữ liệu của bạn sẽ cần phải phẳng hơn, vì điều này sẽ cho phép các tiện ích sắp xếp của bạn dịch giữa các mô hình json / xml và java của bạn. Sử dụng RPC cũng cho phép bạn triển khai kiến trúc mạnh mẽ hơn, như được trích dẫn từ phần gwt dev trên trang web của Google.
"Triển khai Máy khách / Máy chủ đơn giản
Cách đầu tiên và đơn giản nhất để nghĩ về các định nghĩa dịch vụ là coi chúng như là toàn bộ phần sau của ứng dụng của bạn. Từ quan điểm này, mã phía máy khách là "giao diện người dùng" của bạn và tất cả mã dịch vụ chạy trên máy chủ là "giao diện người dùng". Nếu bạn thực hiện phương pháp này, các triển khai dịch vụ của bạn sẽ có xu hướng là các API có mục đích chung hơn không được kết hợp chặt chẽ với một ứng dụng cụ thể. Các định nghĩa dịch vụ của bạn có thể sẽ truy cập trực tiếp vào cơ sở dữ liệu thông qua JDBC hoặc Hibernate hoặc thậm chí các tệp trong hệ thống tệp của máy chủ. Đối với nhiều ứng dụng, chế độ xem này là phù hợp và nó có thể rất hiệu quả vì nó làm giảm số lượng cấp.
Triển khai nhiều tầng
Trong các kiến trúc nhiều tầng, phức tạp hơn, các định nghĩa dịch vụ GWT của bạn có thể chỉ đơn giản là các cổng nhẹ gọi đến các môi trường máy chủ back-end như máy chủ J2EE. Từ góc độ này, các dịch vụ của bạn có thể được xem như "một nửa máy chủ" của giao diện người dùng ứng dụng của bạn. Thay vì có mục đích chung, các dịch vụ được tạo ra cho các nhu cầu cụ thể của giao diện người dùng của bạn. Các dịch vụ của bạn trở thành "giao diện người dùng" cho các lớp "kết thúc phía sau" được viết bằng cách kết hợp các lệnh gọi tới lớp dịch vụ kết thúc có mục đích chung hơn, được thực hiện, chẳng hạn như một cụm máy chủ J2EE. Loại kiến trúc này phù hợp nếu bạn yêu cầu các dịch vụ back-end của mình chạy trên một máy tính vật lý riêng biệt với máy chủ HTTP của bạn. "
Cũng lưu ý rằng việc thiết lập một dịch vụ RequestFactory yêu cầu tạo khoảng 6 lớp java hoặc lâu hơn, trong đó RPC chỉ yêu cầu 3. Nhiều mã hơn == nhiều lỗi và phức tạp hơn trong sách của tôi.
RequestFactory cũng có chi phí cao hơn một chút trong quá trình xử lý yêu cầu, vì nó phải điều khiển tuần tự hóa giữa proxy dữ liệu và các mô hình java thực tế. Giao diện bổ sung này bổ sung thêm các chu trình xử lý có thể thực sự cộng dồn trong môi trường doanh nghiệp hoặc sản xuất.
Tôi cũng không tin rằng các dịch vụ RequestFactory đang tuần tự hóa như các dịch vụ RPC.
Nói chung, sau khi sử dụng cả hai một thời gian, tôi luôn sử dụng RPC vì nó nhẹ hơn, dễ kiểm tra và gỡ lỗi hơn, và nhanh hơn khi sử dụng RequestFactory. Mặc dù RequestFactory có thể thanh lịch hơn và có thể mở rộng hơn nhưng phần truy cập RPC của nó. Sự phức tạp thêm vào không làm cho nó trở thành một công cụ tốt hơn cần thiết.
Ý kiến của tôi là kiến trúc tốt nhất là sử dụng hai ứng dụng web, một máy khách và một máy chủ. Máy chủ là một ứng dụng web java chung chung nhẹ đơn giản sử dụng thư viện servlet.jar. Khách hàng là GWT. Bạn thực hiện yêu cầu RESTful thông qua GWT-RPC vào phía máy chủ của ứng dụng web máy khách. Phía máy chủ của máy khách chỉ là một đường truyền đến máy khách apache http sử dụng một đường hầm liên tục vào trình xử lý yêu cầu mà bạn đang chạy dưới dạng một servlet duy nhất trong ứng dụng web servlet máy chủ của bạn. Ứng dụng web servlet nên chứa lớp ứng dụng cơ sở dữ liệu của bạn (ngủ đông, cayenne, sql, v.v.) Điều này cho phép bạn tách biệt hoàn toàn các mô hình đối tượng cơ sở dữ liệu khỏi máy khách thực tế, cung cấp một cách mở rộng và mạnh mẽ hơn nhiều để phát triển và đơn vị kiểm tra ứng dụng của bạn. Được cho là nó yêu cầu một chút thời gian thiết lập ban đầu, nhưng cuối cùng cho phép bạn tạo một nhà máy yêu cầu động bên ngoài GWT. Điều này cho phép bạn tận dụng những gì tốt nhất của cả hai thế giới. Chưa kể có thể kiểm tra và thực hiện các thay đổi đối với phía máy chủ của bạn mà không cần phải có ứng dụng khách gwt được biên dịch hoặc xây dựng.