zorba-xquery – Pola desain banyak digunakan di dalam komunitas berorientasi objek. Mereka terbukti matang dan solusi yang dapat digunakan kembali yang memfasilitasi pengembangan modul dengan kopling minimal. Selain itu, pola desain juga merupakan konstruksi tingkat tinggi yang berkontribusi untuk meningkatkan komunikasi antar pengembang.Saat ini, XQuery dan keluarga spesifikasinya digunakan lebih dari sekadar menanyakan koleksi dan dokumen XML. XQuery semakin banyak digunakan sebagai bahasa pemrograman multi-paradigma yang lengkap. Tujuan dari makalah ini adalah (1) untuk memotivasi kebutuhan pola desain XQuery menggunakan contoh aplikasi dunia nyata dan (2) untuk mengeksplorasi keberadaan solusi desain umum untuk memecahkan masalah berulang dalam aplikasi XQuery skala besar.
Mengulas Tentang XQuery Design Patterns – Seperti yang dijelaskan di awal bagian ini, masalah seperti itu telah dipecahkan dalam komunitas berorientasi objek dengan mengembangkan dan menerapkan pola desain. Didorong oleh pengamatan ini, kami memutuskan untuk mulai menggunakan pola desain untuk mengatasi ketidaksesuaian yang dijelaskan di atas. Selain memotivasi penggunaan pola desain untuk XQuery, kontribusi makalah ini adalah (1) untuk mengidentifikasi ketidaksesuaian dalam aplikasi dunia nyata dan (2) untuk menunjukkan bagaimana ketidaksesuaian ini dapat diperbaiki dengan menggunakan pola desain. Secara khusus, kami menyajikan empat pola desain dan menjelaskan bagaimana masing-masing pola tersebut memecahkan satu masalah desain tertentu dalam aplikasi contoh (yang sedang berjalan) kami.
Mengulas Tentang XQuery Design Patterns
Sisa dari makalah ini disusun sebagai berikut. Di Bagian 2, kami menjelaskan kasus penggunaan untuk contoh kami yang sedang berjalan. Contoh ini akan digunakan untuk menunjukkan masalah desain yang ada dalam aplikasi dunia nyata. Di masing-masing dari empat bagian berikut (yaitu Bagian 3, 4, 5, dan 6), kami menyajikan satu pola desain untuk memecahkan salah satu masalah desain yang diidentifikasi. Bagian 7 menyimpulkan makalah dan memberikan pandangan tentang pekerjaan di masa depan
Menjalankan Contoh: Aplikasi AtomPub
Protokol Penerbitan Atom (AtomPub; lihat RFC5023) adalah protokol berbasis HTTP untuk membuat dan memperbarui sumber daya di web. Akhir-akhir ini, menjadi banyak digunakan untuk mengimplementasikan API untuk layanan cloud. Contoh yang paling menonjol mungkin adalah Protokol Data Google[1]. AtomPub dibangun di atas Format Sindikasi Atom yang merupakan representasi XML dari kumpulan sumber daya yang berubah-ubah (mis. umpan web). Oleh karena itu, XQuery sangat cocok untuk mengimplementasikan layanan (cloud) berbasis AtomPub.
Kami menggunakan aplikasi AtomPub untuk menyajikan pola desain untuk XQuery. Aplikasi ini sangat cocok untuk banyak pola (umum) karena sebagian besar komponennya harus dapat digunakan kembali oleh komponen aplikasi lainnya. Selain itu, memanfaatkan perpustakaan yang ada (misalnya untuk komunikasi dan otentikasi HTTP) memerlukan beberapa keputusan desain yang cermat untuk dibuat. Pada dasarnya, aplikasi AtomPub terdiri dari dua komponen utama: klien dan server. Klien adalah aplikasi XQuery yang harus mengimplementasikan dua kasus penggunaan dasar berikut:
Kasus Penggunaan 1: Kirim permintaan HTTP untuk membuat entri Atom.
Kasus Penggunaan 2: Kirim permintaan HTTP untuk mengambil entri Atom tertentu. Entri yang dihasilkan harus diubah menjadi HTML.
Server adalah aplikasi yang berjalan di dalam server aplikasi berkemampuan XQuery. Artinya, fungsinya dipicu oleh permintaan HTTP. Fungsi-fungsi tersebut memiliki akses ke konten permintaan HTTP menggunakan modul (HTTP) yang disediakan oleh server aplikasi. Server bertindak sebagai mitra untuk permintaan klien. Secara khusus, itu harus dapat menyelesaikan dua kasus penggunaan berikut:
Kasus Penggunaan 3: Menerima entri AtomPub dan menyimpannya. Seharusnya dimungkinkan untuk menyimpan entri di lokasi arbitrer seperti sistem file atau koleksi XQuery. Kasus Penggunaan 4: Posting pesan di Twitter untuk setiap entri yang dibuat dalam Kasus Penggunaan 3.
Di bagian selanjutnya dari makalah ini, kami menunjukkan bagaimana tantangan desain dalam mengimplementasikan use case yang dijelaskan dapat diselesaikan dengan memanfaatkan pola desain. Kita mulai dengan Kasus Penggunaan 1 dan 2 dari klien di Bagian 3 dan 4, masing-masing. Setelah itu, Bagian 5 dan 6 menjelaskan desain dan implementasi Use Cases 3 dan 4. Tabel berikut menggambarkan pemetaan kasus penggunaan, bagian, fitur XQuery yang diperlukan, dan nama pola yang digunakan untuk mengimplementasikan fitur yang dimaksud .
Baca Juga : Mari Kita Mempelajari XQuery Lebih Dalam Lagi
Pertimbangan Implementasi
Dalam implementasi yang disajikan di bagian terakhir, kami membuat beberapa keputusan untuk membuat esensi makalah lebih mudah dipahami dan meningkatkan keterbacaan kode. Keputusan ini juga tidak wajib untuk menerapkan Rantai Tanggung Jawab dan mungkin juga tidak optimal. Oleh karena itu pola ini dapat diimplementasikan di XQuery 1.0. Pada bagian ini, kami membahas beberapa aspek implementasi alternatif.
Pertimbangan 1: Implementasi klien, rantai fungsi yang berpartisipasi menggunakan XQuery Scripting. Namun, ada banyak cara untuk menerapkan chaining. Misalnya, rantai dapat diimplementasikan menggunakan Continuation Passing Style atau dengan menggunakan urutan item fungsi yang dieksekusi secara berurutan.
Pertimbangan 2: Keputusan lain yang kami ambil untuk membuat kode lebih tajam adalah dengan mengimplementasikan fungsi yang berpartisipasi menggunakan Fasilitas Pembaruan XQuery. Implementasi alternatif dapat menyalin dan mengubah elemen permintaan dan mengembalikannya sebagai hasil dari fungsi. Dalam hal ini, klien perlu memastikan bahwa elemen yang dikembalikan diteruskan sebagai argumen ke fungsi berikutnya.
Kesimpulan
Chain of Responsibility membantu kami meningkatkan fleksibilitas dan penggunaan kembali modul yang terlibat untuk mengimplementasikan Use Case 1. Hasilnya, kami memperoleh yang berikut:
Pengurangan kopling: Klien AtomPub telah dipisahkan dari Klien HTTP dan modul opsional lainnya seperti autentikasi HTTP, Klien OAuth, atau OpenID.
Fleksibilitas tambahan: Setiap fungsi dalam rantai dapat mengonfigurasi permintaan atau bahkan mengambil alih tanggung jawab untuk memproses permintaan. Lebih dari itu, kode dapat dengan mudah digunakan kembali dalam pengaturan yang berbeda. Misalnya, metode autentikasi yang berbeda dapat digunakan dengan mengganti fungsi http-auth:basic() dengan fungsi yang sesuai dari modul autentikasi yang berbeda.
Kesimpulan & Pandangan
Dalam makalah ini, kami memotivasi perlunya pola desain XQuery. Alasannya adalah karena semakin banyak aplikasi XQuery besar yang sebagian besar menunjukkan gejala yang terkenal di dunia berorientasi objek dan telah diselesaikan dengan menggunakan pola desain. Secara lebih rinci, kami telah menyajikan empat masalah desain di sepanjang contoh yang sedang berjalan. Selain itu, kami telah menunjukkan bagaimana masing-masing masalah ini dapat diselesaikan dengan menerapkan pola desain tertentu.
Kami telah memilih untuk menggunakan implementasi klien dan server AtomPub sebagai contoh yang berjalan. Untuk klien AtomPub, kami menggunakan Chain of Responsibility (lihat Bagian 3) yang menggunakan beberapa modul yang digabungkan secara longgar untuk membuat dan mengirim permintaan HTTP. Penerjemah (lihat Bagian 4) membantu kami menyediakan mesin rendering HTML yang fleksibel dan dapat diperluas untuk entri Atom. Untuk server AtomPub, Pola Strategi (Bag. 5) memungkinkan algoritme penyimpanan yang dapat dikonfigurasi dengan menampilkan fungsi tingkat tinggi. Terakhir, Pola Pengamat (Bag. 6) menyediakan cara untuk mendaftarkan layanan (misalnya pemberitahuan Twitter) yang secara otomatis diberi tahu jika keadaan objek yang diamati berubah.
Secara umum, aspek terpenting dari setiap pola yang disajikan dalam makalah ini adalah memisahkan fungsi dan modul XQuery. Misalnya, dalam Rantai Tanggung Jawab, kami mencapai ini dengan menghapus dependensi antar fungsi dengan menyetujui elemen Skema XML yang umum (yaitu item permintaan). Pola Strategi dan Pengamat sama-sama memanfaatkan fungsi tingkat tinggi sebagai mekanisme pemisahan.
Namun, empat pola yang disajikan dalam makalah ini hanyalah titik awal. Di masa mendatang, kami ingin mengembangkan katalog lengkap solusi desain yang dapat digunakan kembali untuk masalah desain XQuery yang paling sering terjadi. Selain itu, kami ingin mengklasifikasikan pola desain ini menurut (1) fitur bahasa (yaitu XQuery fungsional murni, Pembaruan XQuery, dan XQuery Scripting) dan (2) kategori (yaitu kreasi, struktural, dan perilaku).