Tidak seperti RequestFactory yang memiliki kemampuan penanganan dan pengujian error yang buruk (karena memproses sebagian besar hal di bawah tenda GWT), RPC memungkinkan Anda menggunakan pendekatan yang lebih berorientasi layanan. RequestFactory mengimplementasikan pendekatan gaya injeksi dependensi yang lebih modern yang dapat memberikan pendekatan yang berguna jika Anda perlu memanggil struktur data polimorfik yang kompleks. Saat menggunakan RPC, struktur data Anda harus lebih datar, karena ini akan memungkinkan utilitas marshaling Anda menerjemahkan antara model json / xml dan java Anda. Menggunakan RPC juga memungkinkan Anda mengimplementasikan arsitektur yang lebih kuat, seperti dikutip dari bagian gwt dev di situs Google.
"Penerapan Klien / Server Sederhana
Cara pertama dan paling mudah untuk memikirkan definisi layanan adalah memperlakukannya sebagai keseluruhan backend aplikasi Anda. Dari perspektif ini, kode sisi klien adalah "ujung depan" Anda dan semua kode layanan yang berjalan di server adalah "ujung belakang". Jika Anda menggunakan pendekatan ini, implementasi layanan Anda akan cenderung menjadi API tujuan umum yang tidak digabungkan erat ke satu aplikasi tertentu. Definisi layanan Anda kemungkinan besar akan mengakses database secara langsung melalui JDBC atau Hibernate atau bahkan file dalam sistem file server. Untuk banyak aplikasi, tampilan ini sesuai, dan bisa sangat efisien karena mengurangi jumlah tingkatan.
Penerapan Multi-Tingkat
Dalam arsitektur multi-tingkat yang lebih kompleks, definisi layanan GWT Anda dapat berupa gateway ringan yang memanggil lingkungan server back-end seperti server J2EE. Dari perspektif ini, layanan Anda dapat dilihat sebagai "setengah server" dari antarmuka pengguna aplikasi Anda. Alih-alih ditujukan untuk tujuan umum, layanan dibuat untuk kebutuhan khusus antarmuka pengguna Anda. Layanan Anda menjadi kelas "ujung depan" ke kelas "ujung belakang" yang ditulis dengan menggabungkan panggilan ke lapisan layanan ujung belakang yang lebih umum, diimplementasikan, misalnya, sebagai kumpulan server J2EE. Jenis arsitektur ini sesuai jika Anda memerlukan layanan back-end untuk dijalankan di komputer yang terpisah secara fisik dari server HTTP Anda. "
Juga perhatikan bahwa menyiapkan layanan RequestFactory tunggal membutuhkan pembuatan sekitar 6 atau lebih kelas java dimana RPC hanya membutuhkan 3. Lebih banyak kode == lebih banyak kesalahan dan kompleksitas dalam buku saya.
RequestFactory juga memiliki sedikit lebih banyak overhead selama pemrosesan permintaan, karena ia harus mengatur serialisasi antara proxy data dan model java yang sebenarnya. Antarmuka tambahan ini menambahkan siklus pemrosesan ekstra yang benar-benar dapat bertambah di lingkungan perusahaan atau produksi.
Saya juga tidak percaya bahwa layanan RequestFactory adalah serialisasi seperti layanan RPC.
Semua dalam semua setelah menggunakan keduanya untuk beberapa waktu sekarang, saya selalu menggunakan RPC karena lebih ringan, lebih mudah untuk menguji dan debug, dan lebih cepat kemudian menggunakan RequestFactory. Meskipun RequestFactory mungkin lebih elegan dan dapat diperluas daripada bagian RPC-nya. Kompleksitas tambahan tidak membuatnya menjadi alat yang lebih baik.
Pendapat saya adalah bahwa arsitektur terbaik adalah menggunakan dua aplikasi web, satu klien dan satu server. Server adalah aplikasi web java umum ringan sederhana yang menggunakan perpustakaan servlet.jar. Kliennya adalah GWT. Anda membuat permintaan RESTful melalui GWT-RPC ke sisi server aplikasi web klien. Sisi server klien hanyalah sebuah pass untuk apache http klien yang menggunakan terowongan persisten ke penangan permintaan yang Anda jalankan sebagai satu servlet di aplikasi web server servlet Anda. Aplikasi web servlet harus berisi lapisan aplikasi database Anda (hibernate, cayenne, sql dll ..). Hal ini memungkinkan Anda untuk sepenuhnya memisahkan model objek database dari klien sebenarnya, menyediakan cara yang jauh lebih dapat diperluas dan kuat untuk mengembangkan dan menguji unit aplikasi Anda. Memang membutuhkan sedikit waktu penyiapan awal, tetapi pada akhirnya memungkinkan Anda untuk membuat pabrik permintaan dinamis yang berada di luar GWT. Ini memungkinkan Anda memanfaatkan yang terbaik dari kedua dunia. Belum lagi dapat menguji dan membuat perubahan pada sisi server Anda tanpa harus mengkompilasi atau membangun klien gwt.