Pengembangan tim untuk menanyakan data dari database - bagian 3

Hari ini, tes multidimensi tim permintaan data dari database berlangsung, proses pengembangannya dijelaskan secara rinci dan sangat bertele-tele di sini dan di sini .


Apa yang ditunjukkan oleh tes? Tim bekerja, tetapi ... dalam kasus penggunaan di mana Anda harus menggunakannya, itu tidak nyaman untuk mengkonfigurasinya.


Seperti yang saya sebutkan dalam publikasi pertama, untuk setiap pertukaran data dengan penyedia layanan KYC, sebanyak mungkin, relatif banyak catatan harus dipilih dari database. Lebih dari selusin. Perilaku algoritma untuk mengekstraksi catatan dari database dalam kerangka kerja setiap permintaan adalah identik, hanya pengaturannya yang diubah. Jika saya pertama kali menulis tes integrasi yang menunjukkan kasus penggunaan pertempuran, saya akan mengerti detail kunci apa yang tidak boleh diabaikan. Tes integrasi mungkin terlihat seperti ini:


describe('configure and run database requests', () => { const context = require('../src/storage/requestContext'); const requestHandler = require('../src/storage/requestHandler'); it('should get full recordset from db', (done) => { for(let key of context.rules.keys()) { let handle = requestHandler.bind(context, [key]); context.store.subscribe(handle); } const assert = checkDataIsReady.bind(context, [done]); context.store.subscribe(assert); const note = { Id: 1, UserId: 38 }; const start = { type: 'NOTE', note }; context.store.dispatch(start); }); function checkDataIsReady(args) { if(notAllDataIsHereYet()) return; checkUserRecord(); // //    ,  //        // const checkIsCompleted = args[0]; checkIsCompleted(); } function notAllDataIsHereYet(){ // //  ,   //       // return false; } function checkUserRecord(){ const user = context.store.getState().user; expect(user.Id).toEqual(38); expect(user.Name).toEqual('Jack'); } }); 

Kardinalitas perbedaannya adalah kami menyiapkan aturan untuk konfigurasi kueri terlebih dahulu dan menyimpannya dalam kamus context.rules . Dan kamus ini serta objek lain yang diperlukan untuk mengeksekusi kueri dan menyimpan hasilnya terdapat dalam konteks yang kami kumpulkan dari konteks penyimpanan basis data yang telah dikonfigurasi. context.store , context.store penyimpanan kontainer keadaan pra-konfigurasi.


Pada saat yang sama, aturan konfigurasi kueri dapat berisi data string biasa, misalnya, nama tabel dari mana data harus diminta, serta metode pabrik yang menghasilkan kueri ke database dan metode pengiriman yang mengirim tindakan ke wadah negara. Dalam situasi ini, konfigurasi perintah yang diperlukan terlihat sangat berbeda dari yang disarankan oleh kode.


Solusi arsitektur ini memungkinkan kita, antara lain, untuk menentukan berbagai tingkat pemeriksaan KYC, cukup dalam bentuk set string ( Set ), yang digunakan sebagai kunci saat menyimpan aturan konfigurasi kueri. Misalnya, jika kami hanya ingin mengirim data pribadi dan alamat untuk verifikasi, kami cukup memasukkan kunci yang sesuai dalam serangkaian baris: user , person , dan address .


Tes di atas menunjukkan opsi konfigurasi maksimum, melewati seluruh kamus aturan dan mengatur kode kueri umum, pada tabel tertentu. Nah, seperti yang Anda lihat dalam kode di bawah ini, peluncuran permintaan yang sebenarnya akan terjadi sebagai reaksi terhadap peristiwa perubahan wadah negara:


 let handle = requestHandler.bind(context, [key]); context.store.subscribe(handle); 

Tidak akan ada deskripsi proses implementasi di semua detail dingin hari ini, karena belum terjadi ...

Source: https://habr.com/ru/post/id436546/


All Articles