(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': data().getTime(),įvykis:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Ruby on Rails moduliavimas su "Packwerk" II epizodas - The Codest
The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2022-01-10
Programinės įrangos kūrimas

Ruby on Rails moduliavimas su "Packwerk Episode II

Nicolas Nisoria

Antrajame mūsų Ruby on Rails moduliavimo su "Packwerk" epizode atidžiau apžvelgsime paraiškos kaip paketo koncepciją.

Paraiška kaip paketas

Mūsų taikomosios programos moduliavimo būdas - visą programą paversti paketu.

Sukurti struktūrą

Pirmiausia turime sukurti app/packages aplanką, į kurį dėsime visus savo paketus. Norėdami atskirti savo paketus, turime atskirti kiekvieną MVC koncepcija viename aplanke. Paėmus CodeTriage projektas kaip pavyzdį galime pateikti tokį paveikslėlį.

paketo struktūra

Jei bandysime paleisti serverį, jis neras konstantų. Štai kodėl turime pridėti konfigūracijos eilutę prie mūsų application.rb

config.paths.add 'app/packages', glob: '*/{*,*/concerns}', eager_load:true

Dabar programa veikia, bet ji negali rasti rodinių, todėl turime pridėti dar vieną konfigūracijos eilutę į mūsų application_controller.rb

append_view_path(Dir.glob(Bėgiai.root.join('app/packages/*/views')))

Sukurti paketus

Mūsų struktūra paruošta, todėl dabar galime pradėti kurti paketus. Tam mums tereikia pridėtipackage.yml į kiekvieną aplanką su tokia konfigūracija:

enforce_privacy: false
enforce_dependencies: true

package.yml

enforce_privacypateikia . mus galimybė izoliuoti visas paketo konstantas ir dirbti su viešąja API. Norėdami atskleisti viešąsias konstantas, turime pridėti konstantas, pvz. packages/users/app/public.Kol kas šią konfigūraciją nustatysime į klaidinga.

enforce_dependencies užtikrins paketo priklausomybę ir patikrins visas konstantų nuorodas. Jei priklausomybė nėra aiškiai apibrėžta, tai bus ribos pažeidimas.

Paketų sistemos patvirtinimas

Packwerk nustatė kriterijų, kurio turime laikytis, kad turėtume galiojančią paketų sistemą. Galime pradėti vykdyti Packwerk patvirtinti mūsų konsolėje.

 Patikrinsime aplankų struktūrą, paketo konfigūracija, ir automatinis kelio talpyklos įkėlimas.

Šiuo metu mūsų programa negalioja, todėl turime ištaisyti apkrovos keliuspackwerk.yml. Tam tereikia pridėti trūkstamus kelius.

# packwerk.yml

load_paths:
.
.
.

# Vartotojai
- app/packages/users/controllers
- app/packages/users/models
- app/packages/users/package.yml
- app/packages/users/views

Šiuo metu esame pasiruošę patikrinti ribų pažeidimus savo programoje. Norėdami patikrinti pažeidimus, galime paleistipackwerk update-deprecations , ši komanda sukurs deprecated_references.yml kiekvieno paketo failą. Kiekviename faile rasime paketo pavadinimą, pažeidimo tipą ir failo kelią. Turėdami visą šią informaciją žinome, kur yra pažeidimas, ir galime priimti sprendimą, kaip jį pašalinti.

deprecated_references.yml
# deprecated_references.yml

.
.
.

app/packages/repos:
  "::Repo":
    : "Repo:": pažeidimai:
    - priklausomybė
    failai:
    - app/packages/users/models/user.rb

Remdamiesi pavyzdžiu, aprašysime kiekvieną sukurtos informacijos dalį.
pagal Packwerk.

- app/packages/repos  - paketas, kuriame pastovus pažeidimas yra
rasta.

- ::Repo  - kelias iki failo, kuriame yra pažeista konstanta.

- priklausomybė  - tam tikros rūšies pažeidimas - priklausomybės arba privatumo.

- app/packages/users/models/user.rb  - kelias iki failo, kuriame yra pažeista konstanta.

Baigdami šį skyrių, nepamirškite pridėti naujų sugeneruotų failų kelių prie packwerk.yml ir dar kartą paleiskite patvirtinimus.

Priklausomybės vizualizavimas

Naudodami visą informaciją, pateiktą package.yml ir deprecated_references.ymltada galime
vizualizuoti priklausomybių grafiką. Tam reikia pridėti dar vieną brangakmenį, šiuo atveju naudosime Pocky.

Veikiamas grėblys Pocky:generuoti sukursime failą, pavadintą packwerk.png kuriame galime vizualizuoti pirmąjį priklausomybių grafiką.

Apibrėžus visus paketus, mūsų diagrama atrodys taip.

grafas be priimtų priklausomybių

priklausomybės jau egzistuoja, bet tai nereiškia, kad jos priimamos Packwerk. Į
priimti priklausomybę, turime pridėti priklausomybių konfigūraciją prie package.yml
kiekvienoje pakuotėje. Daugiausia dėmesio skirsime mail_builders nes tai paketas be žiedinės priklausomybės. Verta paminėti, kad Packwerk neleidžia mums priimti žiedinių priklausomybių.

# app/packages/mail_builders/package.yml

````ruby
enforce_privacy: false
enforce_dependencies: true
dependencies:
- app/packages/docs
- app/packages/issues
- app/packages/repos

Pridėjus šią konfigūraciją, Pocky priimtinas priklausomybes nuspalvins žaliai.

grafas su priimtomis priklausomybėmis

Galime ištrinti deprecated_references.yml iš app/packages/mail_builders ir paleiskite
packwerk update-deprecations dar kartą. Failas nebus generuojamas iš naujo, nes visi
šiame pakete ištaisyti pažeidimai. Svarbu paminėti, kad net jei mes ne Grafikas su priimtomis priklausomybėmis

Ruby apie "Rails" moduliavimą su "Packwerk priimti priklausomybes, mūsų programa veiks kaip ir anksčiau, tačiau dabar turime daugiau
informaciją, kad galėtumėte priimti sprendimus ir keisti struktūrą.

Pašalinti žiedines priklausomybes

Ankstesnėje diagramoje buvo daug žiedinių priklausomybių, kurias reikėjo kažkaip išspręsti. Turime įvairių strategijų, kaip tai padaryti:

- Nieko nedarykite,

- Priimti priklausomybes, Sujungti paketus,

- Perkelti kodas tarp paketų,

- Dubliuoti funkciją, 

- Atlikite priklausomybės įskiepijimą arba priklausomybės įskiepijimą su rašymu.

Viena iš problemų yra ta, kad, norėdami tinkamai atlikti refaktorių, turime žinoti kodų bazę. Nesu gerai susipažinęs su šio projekto kodų baze, nes jį ėmiau kaip pavyzdį, todėl praktiniais sumetimais pasirinksime pirmąją strategiją - nieko nedaryti. Net jei išvengsime didžiosios dalies refaktorizavimo, norime dirbti su priklausomybėmis root pakuotė.

Į šakninį paketą įtraukti visi klijai iš "Rails" sistema, visas klases, iš kurių paveldime, ir priversti jas veikti kartu. Taigi, kad išspręstume žiedinių priklausomybių problemą, toliau nurodytais veiksmais sukursime naują paketą, pavadintą rails:

  1. Perkelkite visus programos_ failus ir aplankus iš programos į app/packages/rails.
  2. Sukurtipackage.yml paketą, kurio konfigūracija tokia pati kaip ankstesnių paketų.
  3. Pridėkite visus naujus failų kelius į packwerk.yml.
  4. Pridėti app/packages/rails kaip priklausomybę nuo kitų paketų.

Sukūrę paketą pradėsime pastebėti daug failų, kurių struktūrą galima pakeisti. Viską perkėlus į atitinkamą paketą ir priėmus
priklausomybių, turėsime naują struktūrą ir švaresnį grafiką.

Paketo struktūra su bėgių paketu
Grafikas be šakninių žiedinių priklausomybių

Priklausomybių pašalinimas iš šakninio paketo

Dabar mūsų grafikas atrodo daug geriau, būtų puiku, jei galėtume pašalinti visas priklausomybes iš šakninio paketo. Jei patikrinsime deprecated_references.yml šakniniame pakete, pastebėsime, kad dauguma jų yra iš testas , lib/tasks , db ir konfigūracija
aplankas. Norėdami išspręsti šias priklausomybes, kiekviename pakete sukursime bandymų aplanką. Turėdami kažką panašaus į app/packages/users/test. Toliau ketiname išskirti lib/tasks , db ir konfigūracijatarp kitų aplankų iš Packwerk analizę, nes šios priklausomybės nėra labai svarbios mūsų analizėje ir neturime paprasto būdo jas išspręsti. Mes pridėsime prie savo packwerk.yml.

atmesti:
- "{bin,node_modules,script,tmp,vendor,lib,db,config,perf_scripts}/**/*"
- "lib/tasks/**/*.rake"

Perkėlus visus testus iš šakninio paketo ir pašalinus aplankus iš analizės, turėsime naują grafiką be šakninių priklausomybių.

Grafikas be šakninių priklausomybių

Kaip matome, vis dar turime žiedinių priklausomybiųvartotojai , atliekynai , ir dokumentai . Nors jų neišsprendėme, dabar turime perduoti svarbios informacijos. Mes žinome, kad kiekvienas komanda kuris atlieka pakeitimus viename iš šių paketų, tikriausiai turės atlikti pakeitimus ir paketuose, turinčiuose žiedinę priklausomybę. Kita vertus, žinome, kad team gali veikti github_fetchers tik žinant, kokie paketai yra
kiekvieną akimirką patiria pokyčius.

Galutinį projekto rezultatą galite rasti čia.

Kitas žingsnis

Kitas žingsnis - kiekviename pakete galite užtikrinti nuolatinį privatumą ir atskleisti tik viešą API, kuri bus prieinama iš kitų paketų. Galite lengvai konfigūruoti, kur jūsų API bus patalpinta package.yml.

enforce_privacy: true
enforce_dependencies: true
public_path: my/custom/path/

Išvados

Packwerk suteikia mums daug informacijos apie mūsų taikomąją programą ir, naudodamiesi šia informacija, galime priimti sprendimus, kaip pagerinti team darbo eigą. Nors procesas atrodė ilgas ir su daugybe konfigūracijų, jis nebūtinai turi būti toks visada. Galime pradėti kurti paketus tik naujam kodui, pridėtam prie mūsų taikomosios programos, o vėliau palaipsniui modulizuoti. Taigi dabar galime pradėti kalbėti apie laipsnišką moduliavimą - šią koncepciją pristatė Stephanas Hagemannas “Pirmą kartą galime nuspręsti pradėti modulizuoti dalį kodo siekiamybės būdu... Tai leidžia mums sukurti palaipsniui besiplečiančią paramos sistemą geresnei taikomosios programos struktūrai”.

Šaltiniai

  1. Laipsniškas Ruby on Rails moduliavimas - Stephan Hagemann
  2. Moduliarumo užtikrinimas "Rails" programėlėse naudojant "Packwerk
  3. Packwerk Github
  4. Straipsnio šaltinio kodas
Skaitmeninių produktų kūrimo konsultacijos

Skaityti daugiau

"GraphQL Ruby". O kaip dėl našumo?

Bėgiai ir kitos transporto priemonės

"Rails" kūrimas naudojant TMUX, "Vim", Fzf + Ripgrep

Susiję straipsniai

Išmaniojo telefono sveikatos priežiūros programėlės su širdies piktograma ir kylančia sveikatos diagrama, pažymėtos The Codest logotipu, iliustracija, vaizduojanti skaitmeninės sveikatos ir sveikatos technologijų sprendimus.
Programinės įrangos kūrimas

Sveikatos priežiūros programinė įranga: Sveikatos priežiūros paslaugos: tipai, naudojimo atvejai

Įrankiai, kuriais šiandien naudojasi sveikatos priežiūros organizacijos, nė iš tolo neprimena prieš kelis dešimtmečius naudotų popierinių kortelių. sveikatos priežiūros programinė įranga dabar padeda sveikatos sistemoms, pacientų priežiūrai ir šiuolaikiniam sveikatos priežiūros paslaugų teikimui klinikinėse ir...

GERIAUSIAS
Abstrakti mažėjančios stulpelinės diagramos su kylančia rodykle ir auksine moneta, simbolizuojančia ekonomiškumą arba taupymą, iliustracija. Viršutiniame kairiajame viršutiniame kampe pavaizduotas The Codest logotipas ir šūkis "In Code We Trust" šviesiai pilkame fone.
Programinės įrangos kūrimas

Kaip padidinti savo Dev komandą neprarandant produkto kokybės

Didinate savo kūrėjų komandą? Sužinokite, kaip augti neprarandant produkto kokybės. Šiame vadove aptariami ženklai, kad atėjo laikas didinti komandą, komandos struktūra, įdarbinimas, vadovavimas ir įrankiai - ir kaip The Codest gali...

GERIAUSIAS
Programinės įrangos kūrimas

Sukurkite ateičiai atsparias žiniatinklio programas: The Codest ekspertų komandos įžvalgos

Sužinokite, kaip The Codest puikiai kuria keičiamo dydžio interaktyvias žiniatinklio programas, naudodama pažangiausias technologijas ir užtikrindama vientisą naudotojų patirtį visose platformose. Sužinokite, kaip mūsų patirtis skatina skaitmeninę transformaciją ir verslo...

GERIAUSIAS
Programinės įrangos kūrimas

10 geriausių Latvijoje įsikūrusių programinės įrangos kūrimo įmonių

Naujausiame mūsų straipsnyje sužinokite apie geriausias Latvijos programinės įrangos kūrimo įmones ir jų inovatyvius sprendimus. Sužinokite, kaip šie technologijų lyderiai gali padėti pakelti jūsų verslo lygį.

thecodest
Įmonių ir didinimo sprendimai

"Java" programinės įrangos kūrimo pagrindai: A Guide to outsourcing Outsourcing Successfully

Išnagrinėkite šį esminį vadovą, kaip sėkmingai outsourcing "Java" programinę įrangą kurti, kad padidintumėte efektyvumą, įgytumėte patirties ir sėkmingai įgyvendintumėte projektus su The Codest.

thecodest

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

    The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

    Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

    Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian is_ISIcelandic lt_LTLithuanian