Bagaimana cara berhenti melakukan hal yang sama

Apakah Anda suka mengulangi operasi rutin dari waktu ke waktu? Saya disini. Tetapi setiap kali di klien SQL ketika bekerja dengan repositori Rostelecom, saya harus mendaftarkan semua gabungan antara pegangan tabel. Dan terlepas dari kenyataan bahwa dalam 90% kasus, bidang dan ketentuan untuk bergabung dengan tabel bertepatan dari kueri ke kueri! Tampaknya setiap klien SQL memiliki fungsi pelengkapan otomatis, tetapi tidak selalu berfungsi untuk penyimpanan: mereka jarang memiliki kendala unik dan kunci asing untuk meningkatkan kinerja, dan tanpa ini, program tidak dapat mengetahui bagaimana entitas terkait dan apa yang dapat dilakukan untuk Anda untuk menyarankan.



Setelah melalui penolakan, kemarahan, tawar-menawar, depresi, dan penerimaan mendekati, saya memutuskan - mengapa tidak mencoba menerapkan auto-complete dengan blackjack sendiri dan sebagaimana mestinya? Saya menggunakan klien dbeaver, ditulis dalam java, ia memiliki versi komunitas open source. Sebuah rencana sederhana telah matang:

  1. Temukan kelas autocomplete dalam kode sumber
  2. Ubah orientasi mereka untuk bekerja dengan metadata eksternal dan tarik informasi tentang gabungan dari sana
  3. ??????
  4. KEUNTUNGAN

Saya dengan cepat menemukan item pertama - saya menemukan permintaan untuk menyesuaikan pengisian otomatis di bugtracker dan menemukan kelas SQLCompletionAnalyzer di komit terkait. Saya melihat kode - apa yang saya butuhkan. Masih menulis ulang sehingga semuanya bekerja. Saya menunggu malam yang bebas dan mulai memikirkan implementasinya. Tabel yang menghubungkan aturan (metadata) memutuskan untuk memimpin di json. Saya tidak punya pengalaman praktis dengan format ini dan tugas saat ini dilihat sebagai kesempatan untuk memperbaiki kelalaian ini.

Untuk bekerja dengan json, saya memutuskan untuk menggunakan perpustakaan json-sederhana dari Google. Di sini kejutan dimulai. Ternyata, dbeaver, sebagai aplikasi-tru, ditulis pada platform gerhana menggunakan kerangka OSGi. Untuk pengembang yang berpengalaman, hal ini memberikan kenyamanan manajemen dependensi, tetapi bagi saya itu lebih seperti sihir gelap, yang saya jelas tidak siap: seperti biasa, saya mendaftarkan impor kelas yang saya butuhkan dari perpustakaan json-sederhana di header kelas yang diedit, saya tentukan dalam pom. xml, setelah itu proyek menolak untuk merakit dan gagal dengan kesalahan.

Sebagai hasilnya, kami berhasil memperbaiki kesalahan perakitan: Saya mendaftarkan perpustakaan bukan di pom.xml, tetapi di manifes manifest.mf, seperti yang dipersyaratkan oleh OSGI, sambil menetapkannya sebagai paket impor. Bukan solusi yang paling indah, tetapi berhasil. Kemudian kejutan berikutnya muncul. Jika Anda mengembangkan ide intellij, Anda tidak bisa hanya mendapatkan dan menjalankan debug proyek Anda berdasarkan platform gerhana: pengembang yang tidak berpengalaman harus menderita tidak kurang dari seorang analis tanpa penyelesaian permintaan secara otomatis. Pengembang berang-berang sendiri datang untuk menyelamatkan, menunjukkan di wiki semua tarian dengan rebana yang perlu dilakukan. Hal yang paling menjengkelkan adalah bahwa bahkan setelah semua squat ini, proyek tidak ingin memulai debug dengan json library yang terhubung melalui paket impor (walaupun faktanya masih berhasil dirakit menjadi produk jadi).

Pada saat itu, saya berhasil merasakan ketidaknyamanan menggunakan json untuk tugas saya - lagipula, metadata seharusnya diedit secara manual, dan untuk ini format xml lebih cocok. Argumen kedua yang mendukung xml adalah kehadiran di JDK dari semua kelas yang diperlukan, yang memungkinkan untuk berhenti berkelahi dengan perpustakaan eksternal. Dengan senang hati saya mentransfer semua metadata dari json ke xml dan melanjutkan untuk mengedit logika autocomplete.

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 membuat perubahan pada kelas SQLUtils dan SQLCompletionAnalyzer. Idenya adalah ini: jika program gagal menemukan kalimat lengkapi-otomatis yang sesuai dengan logika dasar, maka program akan memeriksa kemungkinan bergabung dengan menggunakan file xml eksternal. File itu sendiri berisi pasangan tabel yang menunjukkan bidang di mana tabel-tabel ini perlu ditautkan. Pembatasan pada tanggal validitas teknis dari entri eff_dttm dan exp_dttm dan flag delete_index yang dihapus diatur secara default.

Ketika perubahan dilakukan pada kode, muncul pertanyaan - siapa yang akan mengisi file metadata? Ada banyak entitas di repositori, itu tidak menguntungkan untuk mendaftarkan semua koneksi sendiri. Pada akhirnya, saya memutuskan untuk menggantungkan tugas ini pada rekan analis saya. File metadata diunggah ke svn, dari mana checkout dilakukan di direktori lokal dengan program. Prinsipnya adalah ini: entitas baru telah muncul di repositori? Satu analis memungkinkan bergabung dengan file, melakukan perubahan, sisanya melakukan pemeriksaan untuk diri mereka sendiri dan menikmati kerja autocomplete: komunitas, akumulasi pengetahuan dan semua itu. Mengadakan lokakarya untuk kolega tentang penggunaan program, menulis sebuah artikel dalam pertemuan - sekarang perusahaan memiliki lebih dari satu alat yang praktis.

Bekerja pada fitur ini memberi saya pemahaman bahwa orang tidak perlu takut untuk mengambil proyek open source - sebagai aturan, mereka memiliki arsitektur yang jelas, dan bahkan pengetahuan dasar bahasa akan cukup untuk eksperimen. Dan dengan tingkat ketekunan tertentu, Anda bahkan dapat menyingkirkan operasi rutin yang dibenci, menghemat waktu untuk eksperimen baru.

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


All Articles