window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes allerede') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Ruby on Rails-modularisering med Packwerk Episode I - The Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2022-01-05
Udvikling af software

Ruby on Rails-modularisering med Packwerk Episode I

Nicolas Nisoria

Mennesker har svært ved at se det store billede af et problem uden at bruge en masse tid og kræfter på det. Det sker især, når man arbejder med store og komplekse applikationer. Hvad er bivirkningerne af mine ændringer? Hvorfor påvirker denne linje her testene af en fjern del af kodebasen? Der findes ikke en perfekt eller komplet løsning, men Shopify har udviklet et værktøj, som sandsynligvis vil hjælpe dig og dit team.

Introduktion

For at kunne tale om Packwerker vi nødt til at introducere et par begreber først.

  • Sammenhængskraft: henviser til målet for, hvor meget elementer i et modul eller en klasse hører sammen.
  • Kobling: henviser til graden af afhængighed mellem moduler eller klasser.
  • Grænser: refererer til barrierer mellem Kode. I dette tilfælde henviser en kodegrænse til forskellige områder inden for den samme kodebase.
  • Modularisering: Processen med at opdele et softwaresystem i flere separate moduler, hvor hvert modul fungerer uafhængigt.

Problemer

Som vi ved, Ruby giver ikke en god løsning til at håndhæve kodegrænser. Vi kan specificere synligheden, men alle afhængigheder vil blive indlæst i det globale navnerum. I store eller monolitiske applikationer giver denne mangel på grænser følgende problemer.

  • Lav samhørighed,
  • Høj kobling,
  • Spaghettikode.

I et forsøg på at modularisere Shopifys monolit og håndhæve grænser prøvede de forskellige løsninger uden at opnå de forventede resultater:
- Indstilling af private konstanter,
- Etablering af grænser gennem perler,
- Brug af test til at forhindre associationer på tværs af komponenter,
- Brug af Rubys modulationsperle,
- Oprettelse af mikrotjenester.

Med al den viden, de havde fra tidligere forsøg, besluttede de at skabe deres eget værktøj: Packwerk.

Packwerk

Hvad er Packwerk?

Packwerk er et statisk analyseværktøj, der bruges til at håndhæve grænser mellem grupper af Ruby filer kaldet pakker.

Hvad er en pakke?

A pakke er en mappe, der indeholder automatisk indlæst kode. Shopifys hold opfordrer til at bruge den bedste designpraksis, når man laver pakker.
- Vi bør pakke ting sammen, der har høj funktionalitet samhørighed,

  • Pakkerne bør være relativt løst koblet til hinanden.

Typer af grænsetjek

Vi kan håndhæve grænser for privatliv og afhængighed, kontrollere overtrædelser af grænserne og cykliske afhængigheder.

Packwerk i praksis

Der er ikke én bestemt måde at strukturere eller omstrukturere din applikation på, når du opretter pakker. I denne artikel vil vi følge den tilgang, der foreslås af
Stephan Hagemann i Gradvis modularisering til Ruby on Rails.

Vælg et projekt

Du kan oprette en ny projekt eller vælg et af dine projekter. Jeg besluttede at bruge et open source-projekt, der hedder KodeTriage. Det er vigtigt at nævne, at vi har brug for en Rails 6-applikation, da Packwerk bruger Zeitwerk.

Initialiser Packwerk

Først skal vi tilføje gemmen til vores Gemfile på følgende måde perle 'packwerk' og derefter køre bundti konsollen. Så er vi klar til at initialisere perlen ved at køre packwerk init.

Derefter bemærker vi, at Packwerk genererede tre filer til os:

  • packwerk.yml

  • pakke.yml

  • bøjninger.yml

packwerk.yml er konfigurationsfilen for Packwerk hvor vi blandt andet definerer inkluderede og ekskluderede filer, viser indlæsningsstierne og definerer bøjningsfilen;

pakke.yml er en pakkes konfigurationsfil. I denne fil tilføjer vi konfigurationen for grænserne for vores pakke. Enhver mappe med package.yml vil blive genkendt som en pakke af Packwerk. Sådan er det, Packwerk skabte vores første
pakke, og vi kalder den rod pakke.

bøjninger.yml er der, hvor vi placerer vores egne bøjninger og akronymer, hvis vi bruger dem.

Du kan læse mere om filerne og deres konfiguration i
Packwerk.

Packwerk egenskaber

For at modularisering skal fungere, har vi brug for tre grundlæggende egenskaber: en navngiven beholder, dens indholdog eksplicit afhængigheder på andre containere. Så lad os definere disse egenskaber i Packwerk:

  • Navn: Navnet på en pakke er dens relative sti fra roden af
    ansøgning.

  • Indhold: Når vi placerer en package.yml i en mappe, er alle filerne i mappen nu indholdet af pakken.

  • Afhængigheder: Vi kan definere afhængigheder af andre pakker ved at tilføje afhængighedsnøglen til pakke.yml.

En anden fil, der ikke er inkluderet som standard, men som anbefales, er README. Det er vigtigt at give oplysninger om brugen af pakken.

Slutningen på Episode I

Rådgivning om digital produktudvikling

Læs mere

GraphQL Ruby. Hvad med performance?

Skinner og andre transportmidler

Rails-udvikling med TMUX, Vim, Fzf + Ripgrep

Relaterede artikler

Udvikling af software

Byg fremtidssikrede webapps: Indsigt fra The Codest's ekspertteam

Oplev, hvordan The Codest udmærker sig ved at skabe skalerbare, interaktive webapplikationer med banebrydende teknologier, der leverer sømløse brugeroplevelser på tværs af alle platforme. Lær, hvordan vores ekspertise driver digital transformation og...

DENKODEST
Udvikling af software

Top 10 Letlands-baserede softwareudviklingsvirksomheder

Læs om Letlands bedste softwareudviklingsvirksomheder og deres innovative løsninger i vores seneste artikel. Find ud af, hvordan disse teknologiledere kan hjælpe med at løfte din virksomhed.

thecodest
Løsninger til virksomheder og scaleups

Grundlæggende om Java-softwareudvikling: En guide til succesfuld outsourcing

Udforsk denne vigtige guide til vellykket outsourcing af Java-softwareudvikling for at forbedre effektiviteten, få adgang til ekspertise og skabe projektsucces med The Codest.

thecodest
Udvikling af software

Den ultimative guide til outsourcing i Polen

Den voldsomme stigning i outsourcing i Polen er drevet af økonomiske, uddannelsesmæssige og teknologiske fremskridt, der fremmer it-vækst og et erhvervsvenligt klima.

TheCodest
Løsninger til virksomheder og scaleups

Den komplette guide til IT-revisionsværktøjer og -teknikker

IT-revisioner sikrer sikre, effektive og kompatible systemer. Lær mere om deres betydning ved at læse hele artiklen.

Codest
Jakub Jakubowicz CTO og medstifter

Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

    Om os

    The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

    Storbritannien - Hovedkvarter

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale teknologiske knudepunkter

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Hjerneambassaden, Konstruktorska
      11, 02-673 Warszawa, Polen

      Codest

    • Hjem
    • Om os
    • Serviceydelser
    • Casestudier
    • Ved hvordan
    • Karriere
    • Ordbog

      Serviceydelser

    • Det rådgivende
    • Udvikling af software
    • Backend-udvikling
    • Frontend-udvikling
    • Staff Augmentation
    • Backend-udviklere
    • Cloud-ingeniører
    • Dataingeniører
    • Andet
    • QA-ingeniører

      Ressourcer

    • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
    • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
    • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
    • Hvad er de største udfordringer for CTO'er og CIO'er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Vilkår for brug af hjemmesiden

    Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

    da_DKDanish
    en_USEnglish de_DEGerman sv_SESwedish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek da_DKDanish