Ki jan yo sispann fè menm bagay la

Èske ou renmen repete operasyon woutin ankò? Se konsa, mwen pa fè sa. Men, chak fwa nan kliyan an SQL lè w ap travay ak depo Rostelecom, mwen te oblije anrejistre tout rantre ant tab yo manyèlman. Lè sa a malgre lefèt ke nan 90% nan ka jaden yo ak kondisyon pou rantre nan tab kowenside soti nan demann pou mande! Li ta sanble ke nenpòt kliyan SQL gen fonksyon oto-konpletman, men pou depo li pa toujou travay: yo raman gen ladan kontrent inik ak kle etranje yo nan lòd yo amelyore pèfòmans, ak san sa a pwogram nan pa pral konnen ki jan antite yo gen rapò ak chak. lòt ak sa li ka fè pou ou ofri.

Ki jan yo sispann fè menm bagay la

Mwen te pase nan refi, kòlè, negosyasyon, depresyon ak apwoche akseptasyon, mwen te deside - poukisa pa eseye aplike otofill ak blakjak tèt mwen epi fè li bon fason? Mwen sèvi ak kliyan dbeaver, ekri an java, li gen yon vèsyon kominote sous louvri. Yon plan senp gen matirite:

  1. Jwenn klas nan kòd sous la ki responsab pou ranpli oto
  2. Redireksyon yo nan travay ak metadata ekstèn epi rale enfòmasyon sou rantre soti nan la
  3. ??????
  4. PWOFI

Mwen kalkile premye pwen an byen vit - mwen te jwenn yon demann nan tracker a ensèk yo ajiste otofill la ak nan komèt dekouvri klas SQLCompletionAnalyzer. Mwen gade kòd la epi li se sa mwen bezwen. Tout sa ki rete se reekri li pou ke tout bagay mache. Mwen te tann yon aswè gratis epi mwen te kòmanse reflechi sou aplikasyon an. Mwen deside ekri règ lyen tab (metadata) nan json. Mwen pa te gen okenn eksperyans pratik travay ak fòma sa a epi yo te wè travay aktyèl la kòm yon opòtinite pou korije omisyon sa a.

Pou travay ak json mwen deside sèvi ak bibliyotèk la json-senp soti nan Google. Sa a se kote sipriz yo te kòmanse. Kòm li te tounen soti, dbeaver, kòm yon aplikasyon vre, te ekri sou platfòm la Eclipse lè l sèvi avèk fondasyon an OSGi. Pou devlopè ki gen eksperyans, bagay sa a fè li pratik jere depandans, men pou mwen li te plis tankou maji nwa, pou ki mwen te klèman pa pare: kòm dabitid, mwen enpòte klas mwen bezwen nan bibliyotèk la json-senp nan tèt la nan. klas la edited, presize li nan pom xml la, apre sa pwojè a kategorikman refize rasanble nòmalman ak aksidan ak erè.

Nan fen a, mwen jere ranje erè yo bati: mwen anrejistre bibliyotèk la pa nan pom.xml, men nan manifest.mf manifest la, jan OSGI mande, pandan y ap presize li kòm enpòte-pakè. Pa pi bèl solisyon, men li travay. Lè sa a, sipriz nan pwochen parèt. Si w ap devlope nan Intellij Idea, ou pa ka jis ale epi kòmanse debogaj pwojè ou a ki baze sou platfòm la eklips: yon pwomotè san eksperyans ta dwe soufri pa mwens pase yon analis san yo pa fini rechèch. Devlopè kastò yo menm te vin pote sekou, yo endike nan wiki a tout dans yo ak yon tanbourin ki bezwen fèt. Bagay ki pi anmèdan se ke menm apre tout skwa sa yo, pwojè a pa t 'vle yo dwe lanse nan debug ak bibliyotèk la json konekte atravè enpòte-pakè (malgre lefèt ke li te toujou avèk siksè reyini nan pwodwi a fini).

Lè sa a, mwen te deja reyalize deranjman nan itilize json pou travay mwen an - apre tout, metadata yo te sipoze modifye manyèlman, ak fòma xml la pi byen adapte pou sa. Dezyèm agiman an favè xml te prezans nan tout klas ki nesesè yo nan JDK a, ki te fè li posib yo sispann goumen ak yon bibliyotèk ekstèn. Avèk anpil plezi, mwen transfere tout metadata yo soti nan json nan xml epi mwen te kòmanse koreksyon lojik autocomplete la.

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

Kòm yon rezilta mwen te fè chanjman nan klas SQLUtils ak SQLCompletionAnalyzer. Lide a se sa a: si pwogram nan pa t 'kapab jwenn sijesyon apwopriye otocomplete lè l sèvi avèk lojik debaz la, Lè sa a, li tcheke pou prezans nan rantre posib lè l sèvi avèk yon dosye ksml ekstèn. Fichye a li menm estoke pè tab ki endike jaden kote tab sa yo bezwen lye. Restriksyon sou dat validite teknik dosye eff_dttm ak exp_dttm ak drapo a efase lojik deleted_ind yo mete pa default.

Lè yo te fè chanjman nan kòd la, kesyon an leve - ki moun ki pral ranpli fichye a ak metadata? Gen yon anpil nan antite nan repozitwa a, li chè pou anrejistre tout koneksyon yo tèt ou. Kòm rezilta, mwen te deside bay analis parèy mwen yo travay sa a. Mwen afiche fichye metadata a nan svn, ki soti kote yon kesye fèt nan anyè lokal la ak pwogram nan. Prensip la se sa a: gen yon nouvo antite parèt nan depo a? Yon analis antre posib rantre nan dosye a, komèt chanjman yo, rès la tcheke soti nan tèt yo epi jwi travay la oto-konpletman: kominote, akimilasyon nan konesans ak tout sa. Fè yon atelye sou lè l sèvi avèk pwogram nan pou kòlèg li, te ekri yon atik nan Confluence - kounye a konpayi an gen yon zouti ki pi pratik.

Travay sou karakteristik sa a te ban m 'konpreyansyon ke pa gen okenn bezwen pè brikole ak pwojè sous louvri - kòm yon règ, yo gen yon achitekti klè, e menm konesans debaz nan lang lan pral ase pou eksperyans. Ak yon sèten kantite pèsistans, ou pral menm kapab debarase m de operasyon woutin rayi, ekonomize tèt ou tan pou nouvo eksperyans.

Sous: www.habr.com

Add nouvo kòmantè