1. Latar Belakang
Di situs web saat ini, terdapat semakin banyak saluran akses, dan teknologi menjadi semakin maju, seperti WAP, SMS, EMAIL, Web tradisional, Socket, dll. Bahkan jika database dan LDAP disertakan, akses Jika jadi, ruang yang perlu diperluas dalam desain harus sangat baik untuk memastikan bahwa ketika menambahkan saluran baru, tidak diperlukan lagi modifikasi kode atau bahkan perubahan kode. Tapi apakah itu mungkin? Saya rasa itu tidak mungkin, tetapi adakah cara untuk menyelesaikan kesempurnaan kerangka akses multi-saluran ini dengan lebih baik
?
[Gambar 1]
Seperti terlihat pada Gambar 1, ketika semua akses yang ada sudah digunakan, para desainer akan terpesona. Jika ingin mengumpulkan orang, maka program ini bisa ditulis dengan cara apapun, dan pasti bisa diimplementasikan , tapi akan lebih sulit untuk mempertahankannya. Mari kita kembali ke pertanyaan, bagaimana kita bisa mencapai implementasi yang lebih sempurna?
[Gambar 2]
Gambar 2 terlihat seperti gurita dengan delapan cakar. Kaki gurita terhubung ke semua saluran akses masing-masing. Inti dari menghubungkan semua saluran ini adalah XMLRouter, kepala gurita di sini adalah berkomunikasi dengan semua saluran dan menyadari Manfaat perutean data dan meningkatkan skalabilitas dan fleksibilitas arsitektur sistem akan banyak. Disebut XMLRouter karena jika XML, bahasa yang fleksibel dan terstandarisasi, tidak digunakan sebagai media transmisi data, beban kerja Router juga akan meningkat secara eksponensial. Mendefinisikan spesifikasi XML akan membawa banyak manfaat di masa depan.
3. Ide dan Pola
Ide asli XMLRouter berasal dari motherboard komputer dan <
>Dalam Pola Pembuat, slot PCI pada motherboard komputer menentukan spesifikasi PCI. Selama kartu yang Anda hasilkan memenuhi standar PCI, kartu tersebut dapat berfungsi saat Anda memasukkannya ke dalam motherboard telah dikemas. . Pola Pembangun mengusulkan untuk memisahkan konstruksi kompleks dan mengimplementasikannya selangkah demi selangkah. XMLRouter memisahkan saluran-saluran kompleks ini dan menjalankannya satu per satu.
Ide layanan: Untuk berkomunikasi dengan Router, dalam antarmuka terpadu ini harus ditentukan saat mengakses saluran, di sini disebut Layanan. Selama program sesuai dengan spesifikasi Layanan, ia dapat mengakses Router dan merutekan data.
Mode Pabrik dan mode Komposit
XMLRouter akan dihasilkan menggunakan mode Pabrik dalam desain sebenarnya RouterFactory, itu akan ditempatkan dalam antrian ketika mulai digunakan. Data transmisi, menerima data dan mengembalikan data semuanya dipanggil dari Router yang sesuai dari antrian, dan mode Komposit diterapkan
4.File
konfigurasi XML File
XMLuntuk Router Penggunaannya terbagi menjadi dua bagian. Yang pertama adalah konfigurasi Router, seperti:
Berikut kutipannya: url="jdbc:microsoft:sqlserver://192.168.0.179:1433" pengguna="test" passwd="tes" /> … |
Ini adalah file konfigurasi Router. Node layanan mewakili saluran yang perlu diakses. Node layanan berisi sub-node konektor. Konfigurasi sub-node dibedakan berdasarkan jenisnya database, berisi atribut seperti url, user, passwd, driver dan sebagainya, jika berupa soket, berisi atribut seperti port dan maxthread. Nilai atribut dapat dikonfigurasi sesuai dengan definisi Anda sendiri
Jenis file XMLlainnya
adalah file data transaksi XML, yang digunakan untuk mentransfer data di semua layanan. Setiap Layanan berisi sendiri File XML yang sesuai, seperti webtrans.xml, memiliki format berikut:
Berikut kutipannya: |
Format dbtrans.xml yang sesuai adalah sebagai berikut
Berikut kutipannya: |
XML lainnya dapat dikustomisasi sesuai aturan tersebut
. 5. Implementasi teknis
RouterFactory
Berikut kutipannya: paket com.web.router; impor com.web.platform.Exception.RouterException; import java.util.java/util/Hashtable.java.html" target="_blank">Hashtable; |
Berikut ini adalah fragmen referensi: /** * Kelas dihasilkan dan dibersihkan oleh Router */ RouterFactory kelas publik { /** * Bagian depan pohon disimpan oleh Router */ private static java/util/Hashtable.java.html" target="_blank">Hashtable QueuePairFront = null; /** * Pohon kembali disimpan oleh Router */ private static java/util/Hashtable.java.html" target="_blank">Hashtable QueuePairBack = null; /** * Pohon disimpan oleh Router */ private static java/util/Hashtable.java.html" target="_blank">Hashtable QueueRouter = null; /** * Mengembalikan XMLRouter */ contoh XMLRouter statis publik = null; /** *Definisi Router*/ RouterDefine statis publik routerdefine = null; /** *Nomor ID Router*/ indeks rute panjang statis publik = 0; /** * @roseuid 3F169C21027C */ Pabrik Router publik() { } /** * Inisialisasi Hashtable dan Vektor */ public static void initFactory() melempar Java/lang/Exception.java.html" target="_blank">Exception { QueuePairFront = new java/util/Hashtable.java.html" target="_blank">Hashtable(); QueuePairBack = java/util/Hashtable.java.html baru" target="_blank">Hashtable(); QueueRouter = new java/util/Hashtable.java.html" target="_blank">Hashtable(); initRouteDefine(); } /** * Inisialisasi pengaturan Rute * */ private static void initRouteDefine() melempar java/lang/Exception.java.html" target="_blank">Exception { jika(definisi router == nol) routerdefine = baru RouterDefine(); routerdefine.loadRouterDef(); } /** * Kembalikan contoh * @return com.web.router.XMLRouter */ getInstance XMLRouter statis publik (indeks panjang) menampilkan RouterException { return (XMLRouter)QueueRouter.get(new java/lang/Long.java.html" target="_blank">Long(index)); } /** * Hasilkan instance XMLRouter * @return com.web.router.XMLRouter * @roseuid 3F1618A103BC */ XMLRouter statis publik popInstance() menampilkan RouterException { indeks rute++; contoh = XMLRouter baru(routeIndex); setDefine( contoh ); QueueRouter.put(new java/lang/Long.java.html" target="_blank">Panjang(routeIndex), instance); contoh kembali; } /** * Hapus Hashtable, Vector, dll. * @roseuid 3F1618B203C1 */ private static void freeResource() melempar Java/lang/Exception.java.html" target="_blank">Exception { QueuePairFront.clear(); QueuePairBack.clear(); QueueRouter.clear(); QueuePairFront = QueuePairBack = QueueRouter = null; } /** * Hapus contoh * @param instanceID * @throwsException */ public static void deleteInstance (contoh XMLRouter) melempar java/lang/Exception.java.html" target="_blank">Exception { contoh.hapus(); QueueRouter.remove( new java/lang/Long.java.html" target="_blank">Long(instance.getIndex() ) ) ; } /** * Metodenya adalah Null. * @kembalikan boolean */ boolean statis publik isNull() { … kembali salah; } } |
Berikut kutipannya: paket com.web.router; impor com.web.platform.Exception.RouterException; import com.web.common.*; import java.util.*; import java.lang.reflect.java/lang/reflect/Method.java.html" target="_blank">Metode; import java.lang.reflect.java/lang/reflect/Constructor.java.html" target="_blank">Konstruktor; /** * @penulis keli * @versi 0.0.1 * Kunci platform, kelas perutean, setiap Router akan dibaca dari RouterFactory * Pohon depan, belakang, routingIndex yang disimpan oleh Router adalah untuk tujuan routing * Objek yang diterapkan dapat dibersihkan nanti. * Router dapat mengimplementasikan fungsi sinkron dan asinkron. */ XMLRouter kelas publik { /** * Bagian depan pohon disimpan oleh Router */ private static java/util/Hashtable.java.html" target="_blank">Hashtable QueuePairFront = null; /** * Pohon kembali disimpan oleh Router */ private static java/util/Hashtable.java.html" target="_blank">Hashtable QueuePairBack = null; /** *Nomor indeks router ini */ indeks rute panjang pribadi = 0; /** *Pengaturan router*/ routerDefine pribadi definisikan = null; /** * Digunakan untuk menentukan titik awal rute */ pribadi java/lang/String.java.html" target="_blank">String action = ""; /** *Variabel ini hanya digunakan untuk mengajukan kelas baru pada metode ruteto */ pribadi java/lang/String.java.html" target="_blank">String classname = ""; /** */ XMLRouter publik (indeks panjang) { ruteIndeks = indeks; } /** * Perutean * @throws Pengecualian * @roseuid 3F1616BD0186 */ perutean kekosongan publik (Env env) menampilkan RouterException, java/lang/Exception.java.html" target="_blank">Pengecualian { /*Jika itu adalah titik awal*/ jika( action.equalsIgnoreCase( RouterConstant.CFG_FUNC_ROUTETO ) ) { … } /*Jika itu adalah titik balik*/ lain jika( action.equalsIgnoreCase( RouterConstant.CFG_FUNC_ROUTEBACK ) ) { … } /*Jika tidak, ini adalah kesalahan*/ kalau tidak throw new RouterException("Atur kesalahan tindakan Router."); } /** * Baca nomor ID Router ini. * @kembali panjang */ getIndex panjang publik() { kembali ruteIndeks; } /** * Hapus semua objek. * @melempar RouterException */ public void clear() menampilkan RouterException { QueuePairFront.remove(new java/lang/Long.java.html" target="_blank">Panjang(routeIndex)); QueuePairBack.remove(new java/lang/Long.java.html" target="_blank">Panjang(routeIndex)); /*Sistem daur ulang*/ java/lang/System.java.html" target="_blank">System.runFinalization(); } /** * Atur pengaturan Router ini. * @param def * @melempar RouterException */ public void setDefine(RouterDefine def) menampilkan RouterException { tentukan = def; } /** * Tetapkan nilai tindakan * @param actionName * @melempar RouterException */ public void setAction( java/lang/String.java.html" target="_blank">String actionName ) { tindakan = nama tindakan; } } |
Kelas layanan
Berikut kutipannya: paket com.web.common; impor com.web.platform.Exception.RouterException; /** * Kelas induk Layanan, abstrak */ kelas abstrak publik RouteService { /** */ layanan rute publik() { } /** * Metode RouteTo adalah titik awal transaksi. * @param env * @melempar RouterException */ public abstract void ruteto(Env env) melempar RouterException; /** *routeBack, titik akhir transaksi, * @param env * @melempar RouterException */ public abstract void ruteback(Env env) melempar RouterException; /** * Metode Routeaccept adalah titik penerimaan transaksi dan fungsi penerimaan Routeto. *routeaccept adalah fungsi pemrosesan utama objek transaksi pasif * @param env * @melempar RouterException */ public abstract void routingaccept(Env env) melempar RouterException; /** * Metode perutean adalah fungsi antarmuka eksternal Layanan * @throws RouterException */ public abstract void routing() throws RouterException |
Selanjutnya, Anda perlu mengimplementasikan semua kelas Layanan, yang tidak akan diperkenalkan di sini
6. Jelaskan bahwa
Router ini hanya dapat mengimplementasikan transaksi sinkron sejauh ini, dan tidak mendukung transaksi asinkron untuk saat ini Namun, karena Router dirancang menggunakan model Komposit, penerapan transaksi asinkron juga dapat diperluas, sehingga analisis mendetail tidak akan dilakukan di sini.