Mönnum finnst erfitt að sjá heildarmynd vandamálsins án þess að verja miklum tíma og fyrirhöfn. Þetta gerist sérstaklega þegar unnið er með stór og flókin forrit. Hverjar eru aukaverkanir breytinga minna? Hvers vegna hefur þessi lína hér áhrif á prófin í fjarlægu hluta kóðagrunnsins? Engin fullkomin eða fullgerð lausn er til, en Shopify hefur þróað tól sem mun líklega hjálpa þér og team þínum.
Inngangur
Til að tala um Pakkaun, við þurfum fyrst að kynna nokkur hugtök.
- Samheldni: vísar til mælikvarða á því hversu mikið þættir í módúli eða bekk tengjast saman.
- Parað: vísar til stigs tengsla milli eininga eða flokka.
- Mörk: vísar til hindrana á milli kóði. Í þessu tilfelli vísar kóðamörk til mismunandi áhugasviða innan sama kóðagrunns.
- Modúlunferlið við að skipta hugbúnaðarkerfi í marga aðskilda eininga þar sem hver eining starfar sjálfstætt.
Vandamál
Eins og við vitum, Rúbín veitir ekki góða lausn til að tryggja kóðamörk. Við getum tilgreint sýnileika en allar forsendur verða hlaðnar í alþjóðlega nafnarýmið. Í stórum eða einlita forritum veldur þessu skorti á mörkum eftirfarandi vandamálum.
- Lágt samhengi,
- Hár samtengingarstuðull,
- Spagettíkóði.
Í tilraun til að móðúlísera monólítinn hjá Shopify og tryggja mörk reyndu þeir mismunandi lausnir án þess að ná þeim niðurstöðum sem búist var við:
– Að stilla einkastaðfastar,
– Að setja mörk með gimsteinum,
– Að nota prófanir til að koma í veg fyrir tengsl milli þátta,
– Með því að nota Modulation-gemy Ruby,
– Að skapa örþjónustur.
Með allri þekkingu úr fyrri tilraunum ákváðu þeir að búa til sitt eigið tæki: Pakkaun.
Pakkaun
Hvað er Packwerk?
Pakkaun er verkfæri fyrir kyrrstæða greiningu sem notað er til að tryggja mörk milli hópa af Rúbín skrár sem kallast pakkar.
Hvað er pakki?
A poki er möppu sem inniheldur sjálfhlaðinn kóða. Shopify's lið Hvetur til að beita bestu hönnunarvenjum við gerð umbúða.
– Við ættum að pakka saman hlutum sem hafa mikla virkni samheldni,
- Pakkar ættu að vera tiltölulega lauslega tengdir hver við annan.
Gerðir markaathugana
Við getum tryggt persónuvernd og takmörk á háðni, athugað brot á þessum takmörkum og hringháðni.
Packwerk í framkvæmd
Það er engin ein tiltekinn leið til að byggja upp eða endurskipuleggja umsóknina þína við gerð pakka. Í þessari grein munum við fylgja þeirri nálgun sem er mælt með af
Stephan Hagemann í Stigvaxandi einingagerð fyrir Ruby on Relsar.
Veldu verkefnið
Þú getur búið til nýtt verkefni eða veldu eitt af verkefnum þínum. Ég ákvað að nota opinn hugbúnaðarverkefni sem kallast Kóðaflokkun. Það er mikilvægt að nefna að við þurfum Rails 6-forrit þar sem Pakkaun notar Zeitwerk.
Frumstilla Packwerk
Fyrst þurfum við að bæta gimsteininn við Gemfile-skrána okkar svona: gull 'packwerk' og hlaupa síðan pakkií konsólanum. Þá erum við tilbúin að frumstilla gem-ið sem keyrir. packwerk upphaf.
Eftir það tökum við eftir að Pakkaun bjó til þrjár skrár fyrir okkur:
-
pakkverk.yml
-
pakki.yml
-
beygingar.yml
pakkverk.yml er stillingarskrá af Pakkaun þar sem við munum skilgreina innifalin og útilokuð skrá, skrá hleðslustígana, skilgreina inflections-skrána, meðal annars;
pakki.yml er stillingarskrá pakkans. Í þessari skrá munum við bæta við stillingum fyrir mörk pakkans. Öll möppu sem inniheldur package.yml verður viðurkennd sem pakki af Pakkaun. Það er allt, Pakkaun bjó til okkar fyrsta
pakki og við köllum það rót pakki.
beygingar.yml er þar sem við munum setja sérsniðnar beygingar og skammstafanir ef við notum þær.
Þú getur fundið nánari upplýsingar um skrárnar og stillingar þeirra í
Pakkaun.
Eiginleikar verkfæris
Til þess að módúlun virki þurfum við þrjá grunn eiginleika: nefndur ílátur, þess efni, og skýr háðleiki á öðrum ílát. Svo skulum við skilgreina þessa eiginleika í Pakkaun:
-
Nafn: Nafn pakka er afstæð slóð hans frá rót
umsókn.
-
InnihaldÞegar við setjum package.yml í möppu, verða öll skráarskrifin í möppunni nú innihald pakkans.
-
ForsendurVið getum skilgreint háðni á önnur forritapakka með því að bæta `dependencies`-lyklinum við pakki.yml.
Önnur skrá sem ekki er innifalin sjálfgefið en er mælt með er README. Mikilvægt er að veita upplýsingar um notkun pakkans.
Endir þáttar I

Lesa meira
GraphQL Ruby. Hvernig er frammistaðan?
Lestar og önnur samgöngutæki
Rails-þróun með tmux, vim, fzf og ripgrep