Perusahaan kami memulai inisiatif SOA yang cukup besar. Kami melakukan banyak hal dengan benar: ada komunikasi yang baik; uang untuk alat-alat yang sesuai; dan kami telah membawa beberapa keahlian yang baik untuk membantu kami dengan transisi.
Kami mencoba mengembangkan standar yang dapat kami ikuti sebagai sebuah kelompok, dan salah satu standar yang diusulkan sedikit mengganggu saya:
Kami telah membuat standar pada pola di mana setiap operasi mengambil objek permintaan dan mengembalikan objek respons.
Saya menyadari bahwa ini kurang lebih merupakan pendekatan standar bagi banyak orang, tetapi saya bertanya mengapa saya harus repot? (Aku tidak begitu baik dengan kebijaksanaan yang diterima, aku butuh alasan).
Sebagian besar layanan yang akan saya sediakan adalah pengambilan metadata organisasi sederhana. Misalnya, cari kebijakan keamanan untuk pengguna tertentu. Ini membutuhkan id pengguna dan tidak ada yang lain. Standar memberi tahu saya bahwa saya harus membungkus permintaan ini dalam suatu objek dan membungkus kebijakan yang dikembalikan dalam objek respons.
Kegelisahan saya diperkuat oleh pandangan pada WSDL yang dihasilkan dari kontrak kami. WCF menghasilkan pesan permintaan dan respons secara otomatis dan bahkan membungkus objek permintaan / respons.
Saya sepenuhnya memahami bahwa jika Anda membuat permintaan yang kompleks maka objek input yang kompleks diperlukan. Itu yang akan Anda lakukan bahkan jika layanan tidak terlibat.
Pertanyaan saya adalah mengapa saya harus membungkus permintaan dan tanggapan secara otomatis ketika:
- Itu membuat layanan sederhana kurang ekspresif
- Anda tetap akan melakukannya untuk layanan yang kompleks
- WCF tetap membuat pesan permintaan / respons
Saya telah menemukan argumen berikut yang mendukung pendekatan ini:
Ini mendukung versi dengan memungkinkan parameter opsional untuk dimasukkan ke objek permintaan.
Kembali pada hari itu, saya melakukan sedikit COM, dan saya akan menganggap ini hampir anti-pola untuk versi. Untuk beberapa hal, saya kira itu akan membantu, tapi saya berharap di mana itu akan membantu, Anda sudah memiliki objek parameter.
Ini memungkinkan data umum dan perilaku diisolasi ke kelas dasar
Yang ini membawa beberapa berat dengan saya.
Ini menjauhkan orang dari perilaku gaya RPC dan menuju perilaku pengiriman pesan
Saya sudah membaca ini di situs Microsoft dan mendengarnya dari guru kami, tetapi saya masih belum memiliki gagasan yang jelas tentang apa artinya atau mengapa itu berharga. Apakah antarmuka yang terlihat alami membuat orang cenderung lupa bahwa mereka memanggil layanan jarak jauh?
Saya sedang melihat refactoring tanda tangan mungkin 300 metode, jadi ini adalah jumlah rasa sakit yang tidak sepele. Saya penggemar berat konsistensi dalam implementasi, jadi saya bersedia untuk menanggung rasa sakit, itu hanya akan membantu untuk mengetahui bahwa semuanya akan sia-sia pada akhirnya.
Catatan Martin Fowler tentang Objek Transfer Data sesuai di sini, saya kira.
Hal yang sama berlaku untuk permintaan. Adapun RPC, dan mengapa itu buruk:
Saya pikir itu benar, tetapi bukan alasan utama. Alasan lain untuk menghindari RPC adalah bahwa hal itu dapat mendorong klien dan layanan yang berpasangan erat.
sumber