Apakah Anda suka mengulangi operasi rutin berulang kali? Jadi saya tidak melakukannya. Tetapi setiap kali di klien SQL saat bekerja dengan penyimpanan Rostelecom, saya harus mendaftarkan semua gabungan antar tabel secara manual. Dan ini terlepas dari kenyataan bahwa dalam 90% kasus, bidang dan ketentuan untuk menggabungkan tabel bertepatan dari satu permintaan ke permintaan lainnya! Tampaknya setiap klien SQL memiliki fungsi pelengkapan otomatis, tetapi untuk penyimpanan itu tidak selalu berfungsi: mereka jarang menyertakan batasan unik dan kunci asing untuk meningkatkan kinerja, dan tanpa ini program tidak akan mengetahui bagaimana entitas terkait satu sama lain. lainnya dan apa manfaatnya bagi Anda.
Setelah melalui penolakan, kemarahan, tawar-menawar, depresi, dan semakin dekat dengan penerimaan, saya memutuskan - mengapa tidak mencoba menerapkan pengisian otomatis dengan blackjack sendiri dan melakukannya dengan cara yang benar? Saya menggunakan klien dbeaver, ditulis dalam java, memiliki versi komunitas open source. Sebuah rencana sederhana telah matang:
- Temukan kelas dalam kode sumber yang bertanggung jawab untuk pelengkapan otomatis
- Arahkan mereka untuk bekerja dengan metadata eksternal dan ambil informasi tentang gabungan dari sana
- ??????
- LABA
Saya menemukan poin pertama dengan cukup cepat - saya menemukan permintaan di pelacak bug untuk menyesuaikan pengisian otomatis dan yang terkait
Untuk bekerja dengan json saya memutuskan untuk menggunakan perpustakaan
Pada akhirnya, saya berhasil memperbaiki kesalahan build: Saya mendaftarkan perpustakaan bukan di pom.xml, tetapi di manifes manifest.mf, seperti yang disyaratkan oleh OSGI, sambil menetapkannya sebagai paket impor. Bukan solusi yang paling indah, tapi berhasil. Lalu kejutan berikutnya pun muncul. Jika Anda mengembangkan di Intellij Idea, Anda tidak bisa langsung mulai men-debug proyek Anda berdasarkan platform gerhana: pengembang yang tidak berpengalaman akan menderita seperti seorang analis yang tidak menyelesaikan kueri. Pengembang berang-berang sendiri datang untuk menyelamatkan, menunjukkan di wiki semua tarian dengan rebana yang perlu dilakukan. Hal yang paling menjengkelkan adalah bahkan setelah semua squat ini, proyek tidak ingin diluncurkan dalam debug dengan perpustakaan json yang terhubung melalui paket impor (terlepas dari kenyataan bahwa proyek tersebut masih berhasil dirakit menjadi produk jadi).
Pada saat itu, saya sudah menyadari ketidaknyamanan menggunakan json untuk tugas saya - lagipula, metadata seharusnya diedit secara manual, dan format xml lebih cocok untuk ini. Argumen kedua yang mendukung xml adalah kehadiran semua kelas yang diperlukan di JDK, yang memungkinkan untuk berhenti berkelahi dengan perpustakaan eksternal. Dengan senang hati, saya mentransfer semua metadata dari json ke xml dan mulai mengedit logika pelengkapan otomatis.
Contoh metadata
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tableRelations>
<tableRelation>
<leftTable>dim_account</leftTable>
<rightTable>dim_partner</rightTable>
<joinColumnPair leftColumn="partner_key" rightColumn="partner_key"/>
<joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
</tableRelation>
<tableRelation>
<leftTable>dim_account</leftTable>
<rightTable>dim_branch</rightTable>
<joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
<joinColumnPair leftColumn="branch_key" rightColumn="branch_key"/>
</tableRelation>
</tableRelations>
Akibatnya saya
Ketika perubahan dilakukan pada kode, muncul pertanyaan - siapa yang akan mengisi file dengan metadata? Ada banyak entitas di repositori, mahal untuk mendaftarkan semua koneksi sendiri. Oleh karena itu, saya memutuskan untuk menugaskan tugas ini kepada rekan analis saya. Saya memposting file metadata di svn, dari mana checkout dilakukan ke direktori lokal dengan program tersebut. Prinsipnya begini: apakah ada entitas baru yang muncul di repositori? Seorang analis memasukkan kemungkinan gabungan ke dalam file, melakukan perubahan, sisanya memeriksa sendiri dan menikmati penyelesaian otomatis yang berfungsi: komunitas, akumulasi pengetahuan, dan sebagainya. Mengadakan lokakarya tentang penggunaan program untuk rekan kerja, menulis artikel di Confluence - sekarang perusahaan memiliki alat lain yang nyaman.
Mengerjakan fitur ini memberi saya pemahaman bahwa tidak perlu takut untuk mengutak-atik proyek sumber terbuka - sebagai aturan, mereka memiliki arsitektur yang jelas, dan bahkan pengetahuan dasar bahasa saja sudah cukup untuk bereksperimen. Dan dengan ketekunan tertentu, Anda bahkan akan mampu menyingkirkan operasi rutin yang dibenci, sehingga menghemat waktu untuk eksperimen baru.
Sumber: www.habr.com