Rutin əməliyyatları təkrar-təkrar təkrarlamağı xoşlayırsınız? Mən yox. Ancaq hər dəfə SQL müştərisində Rostelecom yaddaşı ilə işləyərkən cədvəllər arasındakı bütün birləşmələri əl ilə qeyd etməli oldum. Və bu baxmayaraq ki, 90% hallarda cədvəllərə qoşulma sahələri və şərtləri sorğudan sorğuya üst-üstə düşür! Görünür ki, hər hansı bir SQL müştərisinin avtomatik tamamlama funksiyaları var, lakin saxlama üçün həmişə işləmir: performansı yaxşılaşdırmaq üçün nadir hallarda unikal məhdudiyyət və xarici açar daxildir və bunsuz proqram subyektlərin hər biri ilə necə əlaqəli olduğunu bilməyəcək. digər və sizin üçün nə edə bilər.
İnkar, qəzəb, sövdələşmə, depressiya və qəbula yaxınlaşaraq qərara gəldim - niyə özüm blackjack ilə avtomatik doldurma tətbiq etməyə və bunu düzgün şəkildə etməyə çalışmayaq? Mən java-da yazılmış dbeaver müştərisindən istifadə edirəm, onun açıq mənbə icma versiyası var. Sadə bir plan yetişdi:
- Mənbə kodunda avtomatik tamamlamadan məsul olan sinifləri tapın
- Xarici metadata ilə işləmək üçün onları yönləndirin və oradan birləşmələr haqqında məlumatı çəkin
- ??
- MƏNFƏƏT
Birinci nöqtəni çox tez başa düşdüm - səhv izləyicisində avtomatik doldurmanı tənzimləmək üçün bir sorğu tapdım və əlaqəli
json ilə işləmək üçün kitabxanadan istifadə etmək qərarına gəldim
Sonda quraşdırma xətalarını düzəldə bildim: kitabxananı pom.xml-də deyil, OSGI-nin tələb etdiyi kimi manifest.mf manifestində idxal-paket kimi göstərərək qeydiyyatdan keçirdim. Ən gözəl həll deyil, amma işləyir. Sonra növbəti sürpriz peyda oldu. Əgər siz Intellij Idea-da inkişaf edirsinizsə, sadəcə gedib Eclipse platforması əsasında layihənizi sazlamağa başlaya bilməzsiniz: təcrübəsiz tərtibatçı sorğunu tamamlamadan analitikdən az əziyyət çəkməlidir. Qunduz tərtibatçılarının özləri köməyə gəldilər, vikidə edilməsi lazım olan bir dəf ilə bütün rəqsləri göstərdilər. Ən bezdiricisi odur ki, bütün bu çömbəlmələrdən sonra belə, layihə idxal-paket vasitəsilə qoşulmuş json kitabxanası ilə (hələ də hazır məhsula uğurla yığılmasına baxmayaraq) debugda işə salınmaq istəmədi.
O vaxta qədər mən öz tapşırığım üçün json istifadə etməyin narahatlığını artıq başa düşmüşdüm - axı metadata əl ilə redaktə edilməli idi və xml formatı bunun üçün daha uyğundur. Xml lehinə ikinci arqument JDK-da bütün zəruri siniflərin olması idi ki, bu da xarici kitabxana ilə mübarizəni dayandırmağa imkan verdi. Böyük məmnuniyyətlə bütün metaməlumatları json-dan xml-ə köçürdüm və avtomatik tamamlama məntiqini redaktə etməyə başladım.
Metadata nümunəsi
<?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>
Nəticədə İ
Koda dəyişikliklər edildikdə, sual yarandı - faylı metadata ilə kim dolduracaq? Anbarda bir çox qurum var, bütün əlaqələri özünüz qeydiyyatdan keçirmək bahadır. Nəticədə bu vəzifəni analitik yoldaşlarıma həvalə etmək qərarına gəldim. Mən metadata faylını svn-də yerləşdirdim, oradan proqramla yerli qovluğa yoxlama aparılır. Prinsip belədir: repozitoriyada yeni varlıq yaranıbmı? Bir analitik fayla mümkün birləşmələri daxil edir, dəyişikliklər edir, qalanları özlərini yoxlayır və işləyən avtomatik tamamlamadan həzz alır: icma, biliklərin toplanması və bütün bunlar. Həmkarları üçün proqramdan istifadə ilə bağlı seminar keçirdi, Confluence-də məqalə yazdı - indi şirkətin daha rahat bir aləti var.
Bu xüsusiyyət üzərində işləmək mənə belə bir anlayış verdi ki, açıq mənbəli layihələrlə məşğul olmaqdan qorxmaq lazım deyil - bir qayda olaraq, onlar aydın arxitekturaya malikdirlər və eksperimentlər üçün hətta əsas dil bilikləri də kifayət edəcəkdir. Və müəyyən bir əzmkarlıqla, hətta yeni təcrübələr üçün vaxtınıza qənaət edərək, nifrət edilən rutin əməliyyatlardan qurtula biləcəksiniz.
Mənbə: www.habr.com