Үүнтэй ижил зүйл хийхээ яаж зогсоох вэ

Та ердийн үйлдлүүдийг дахин дахин хийх дуртай юу? Тэгэхээр би тэгэхгүй. Гэхдээ SQL клиент дээр Rostelecom-ийн хадгалалттай ажиллах бүрт би хүснэгтүүдийн хоорондох бүх холболтыг гараар бүртгэх шаардлагатай болдог. Хэдийгээр 90% -д хүснэгтүүдийг нэгтгэх талбарууд болон нөхцөлүүд нь асуулгаас асуулга хооронд давхцаж байсан ч гэсэн! Ямар ч SQL клиент автоматаар дуусгах функцтэй юм шиг санагдаж байна, гэхдээ хадгалалтын хувьд энэ нь үргэлж ажилладаггүй: гүйцэтгэлийг сайжруулахын тулд өвөрмөц хязгаарлалт, гадаад түлхүүрийг оруулах нь ховор бөгөөд үүнгүйгээр програм нь аж ахуйн нэгжүүд тус бүртэй хэрхэн холбоотой болохыг мэдэхгүй байх болно. бусад болон энэ нь танд юу санал болгож чадах вэ.

Үүнтэй ижил зүйл хийхээ яаж зогсоох вэ

Татгалзах, уурлах, наймаалцах, сэтгэлийн хямралд орж, хүлээн зөвшөөрөгдөх дөхсөний эцэст би яагаад блэкжактай автоматаар бөглөх ажлыг өөрөө хийж, зөв ​​аргаар хийж болохгүй гэж шийдсэн юм бэ? Би java хэл дээр бичигдсэн dbeaver клиентийг ашигладаг, энэ нь нээлттэй эхийн олон нийтийн хувилбартай. Энгийн төлөвлөгөө боловсорч гүйцсэн:

  1. Автоматаар бөглөх үүрэгтэй ангиудыг эх кодоос олоорой
  2. Гадны мета өгөгдөлтэй ажиллахын тулд тэдгээрийг дахин чиглүүлж, тэндээс нэгдлийн талаарх мэдээллийг татаж аваарай
  3. ??????
  4. НӨӨЦ

Би эхний санааг маш хурдан олж мэдсэн - би алдаа хянагчаас автоматаар бөглөх тохиргоог тохируулах хүсэлтийг олсон. хийх SQLCompletionAnalyzer классыг нээсэн. Би кодыг харвал надад хэрэгтэй зүйл байна. Бүх зүйл ажиллахын тулд үүнийг дахин бичих л үлдлээ. Би чөлөөт үдшийг хүлээж, хэрэгжилтийн талаар бодож эхлэв. Би хүснэгтийн холбоосын дүрмийг (мета өгөгдөл) json дээр бичихээр шийдсэн. Би энэ форматтай ажиллах ямар ч практик туршлагагүй байсан бөгөөд одоо байгаа ажлыг энэ дутагдлыг засах боломж гэж үзсэн.

json-тэй ажиллахын тулд би номын санг ашиглахаар шийдсэн json-энгийн Google-ээс. Эндээс л гэнэтийн зүйл эхэлсэн. Үүнээс харахад dbeaver нь жинхэнэ програмын хувьд OSGi хүрээг ашиглан Eclipse платформ дээр бичигдсэн байв. Туршлагатай хөгжүүлэгчдийн хувьд энэ зүйл нь хараат байдлыг удирдахад хялбар болгодог, гэхдээ миний хувьд энэ нь харанхуй ид шидтэй адил байсан бөгөөд үүнд би бэлэн биш байсан: ердийнхөөрөө би өөрт хэрэгтэй ангиудыг json-simple номын сангийн толгой хэсэгт оруулж ирдэг. засварласан анги, үүнийг pom.xml-д зааж өгсний дараа төсөл хэвийн угсрахаас эрс татгалзаж, алдаа гарлаа.

Эцэст нь би бүтээх алдааг засч чадсан: Би номын санг pom.xml-д биш, харин OSGI-ийн шаардсан manifest.mf манифест дээр импортын багц гэж зааж өгсөн. Хамгийн үзэсгэлэнтэй шийдэл биш, гэхдээ энэ нь ажилладаг. Дараа нь дараагийн гэнэтийн зүйл гарч ирэв. Хэрэв та Intellij Idea-г хөгжүүлж байгаа бол Elipse платформ дээр тулгуурлан төсөлдөө дибаг хийж эхлэх боломжгүй: туршлагагүй хөгжүүлэгч асуулга бөглөөгүй бол шинжээчээс багагүй зовох ёстой. Минж хөгжүүлэгчид өөрсдөө аврах ажилд ирж, хийх ёстой хэнгэрэгтэй бүх бүжигийг вики дээр зааж өгсөн. Хамгийн ядаргаатай нь энэ олон хов живийн дараа ч гэсэн импортын багцаар холбогдсон json номын сантай (бэлэн бүтээгдэхүүн болгон амжилттай угсарсан ч) төсөл дибаг хийх хүсэлгүй байсан явдал юм.

Тэр үед би json-г даалгавраа ашиглахад тохиромжгүй байдгийг аль хэдийн ойлгосон - эцэст нь мета өгөгдлийг гараар засварлах ёстой байсан бөгөөд xml формат нь үүнд илүү тохиромжтой. Xml-ийг дэмжсэн хоёр дахь аргумент нь JDK-д шаардлагатай бүх ангиуд байгаа нь гадны номын сантай тэмцэхээ зогсоох боломжтой болсон юм. Би маш их баяртайгаар json-оос xml руу бүх мета өгөгдлийг шилжүүлж, автоматаар бөглөх логикийг засварлаж эхлэв.

Мета өгөгдлийн жишээ

<?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>

Үүний үр дүнд би өөрчлөлт хийсэн SQLUtils болон SQLCompletionAnalyzer ангиуд. Үүний санаа нь: хэрэв програм нь үндсэн логикийг ашиглан автоматаар гүйцээх тохиромжтой зөвлөмжийг олж чадаагүй бол гадаад xml файлыг ашиглан боломжит холболт байгаа эсэхийг шалгадаг. Файл нь өөрөө эдгээр хүснэгтүүдийг холбох шаардлагатай талбаруудыг харуулсан хос хүснэгтүүдийг хадгалдаг. eff_dttm болон exp_dttm бичлэгийн техникийн хүчинтэй байх хугацааны хязгаарлалт, устгалын логик устгалын туг deleted_ind нь анхдагчаар тохируулагдсан байдаг.

Кодод өөрчлөлт оруулах үед асуулт гарч ирэв - файлыг мета өгөгдөлөөр хэн дүүргэх вэ? Хадгалах газарт маш олон байгууллага байдаг тул бүх холболтыг өөрөө бүртгүүлэх нь үнэтэй байдаг. Үүний үр дүнд би энэ даалгаврыг шинжээчиддээ даалгахаар шийдсэн. Би мета өгөгдлийн файлыг svn-д байршуулсан бөгөөд тэндээс програмын хамт локал лавлах руу төлбөр тооцоо хийдэг. Энэ зарчим нь: репозиторт шинэ байгууллага бий болсон уу? Нэг шинжээч файлд боломжит нэгдлүүдийг оруулж, өөрчлөлт хийж, бусад нь өөрөө шалгаж, автоматаар бөглөх ажлыг эдэлдэг: нийгэмлэг, мэдлэг хуримтлуулах гэх мэт. Хамтран ажиллагсаддаа програмыг ашиглах талаар семинар зохион байгуулж, Confluence сэтгүүлд нийтлэл бичсэн - одоо компанид илүү тохиромжтой хэрэгсэл бий.

Энэ функц дээр ажиллах нь надад нээлттэй эхийн төслүүдтэй ажиллахаас айх шаардлагагүй гэдгийг ойлгосон - дүрмээр бол тэдгээр нь тодорхой архитектуртай, тэр ч байтугай хэлний анхан шатны мэдлэг нь туршилт хийхэд хангалттай байх болно. Тодорхой хэмжээний тууштай байж та үзэн яддаг ердийн үйлдлүүдээс ангижрах боломжтой болж, шинэ туршилт хийх цагийг хэмнэх болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх