window.pipedriveLeadboosterConfig = { bas: 'leadbooster-chat.pipedrive.com', företagId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = fönster if (w.LeadBooster) { console.warn('LeadBooster finns redan') } annars { w.LeadBooster = { q: [], on: funktion (n, h) { this.q.push({ t: "o", n: n, h: h }) }, trigger: funktion (n) { this.q.push({ t: 't', n: n }) }, } } })() Ruby on Rails Modularisering med Packwerk Avsnitt I - The Codest
Codest
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Industrier
    • Fintech & bankverksamhet
    • E-commerce
    • Adtech
    • Hälsoteknik
    • Tillverkning
    • Logistik
    • Fordon
    • IOT
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
Pil tillbaka GÅ TILLBAKA
2022-01-05
Utveckling av programvara

Ruby on Rails Modularisering med Packwerk Avsnitt I

Nicolas Nisoria

Människor har svårt att se helheten i ett problem utan att ägna mycket tid och kraft åt det. Detta gäller särskilt när man arbetar med stora och komplexa applikationer. Vilka är bieffekterna av mina ändringar? Varför påverkar den här raden testerna av en avlägsen del av kodbasen? En perfekt eller fullständig lösning finns inte, men Shopify kom ut med ett verktyg som förmodligen kommer att hjälpa dig och ditt team.

Inledning

För att kunna prata om Packwerkmåste vi först introducera några begrepp.

  • Sammanhållning: avser måttet på hur mycket element i en modul eller klass hör ihop.
  • Koppling: avser graden av beroende mellan moduler eller klasser.
  • Gränser: avser barriärer mellan kod. I det här fallet avser en kodgräns olika problemområden inom samma kodbas.
  • Modularisering: Processen att dela upp ett programvarusystem i flera separata moduler där varje modul fungerar självständigt.

Problem

Som vi vet, Ruby är inte en bra lösning för att upprätthålla kodgränser. Vi kan specificera synligheten men alla beroenden kommer att laddas in i det globala namnrymden. I stora eller monolitiska applikationer ger denna brist på gränser följande problem.

  • Låg sammanhållning,
  • Hög koppling,
  • Spaghettikod.

I ett försök att modularisera Shopifys monolit och upprätthålla gränser provade de olika lösningar utan att uppnå de förväntade resultaten:
- Inställning av privata konstanter,
- Fastställa gränser genom pärlor,
- Använda tester för att förhindra associationer mellan olika komponenter,
- Använda Ruby's Modulation gem,
- Skapa mikrotjänster.

Med all kunskap från tidigare försök bestämde de sig för att skapa ett eget verktyg: Packwerk.

Packwerk

Vad är Packwerk?

Packwerk är ett statiskt analysverktyg som används för att upprätthålla gränser mellan grupper av Ruby filer som kallas paket.

Vad är ett paket?

A paket är en mapp som innehåller autoloadad kod. Shopifys Team uppmuntrar till att använda de bästa designmetoderna när du skapar paket.
- Vi bör packa ihop saker som har hög funktionell sammanhållning,

  • Paketen bör vara relativt löst kopplade till varandra.

Olika typer av gränskontroller

Vi kan upprätthålla sekretess- och beroendegränser, kontrollera överträdelser av gränserna och cykliska beroenden.

Packwerk i praktiken

Det finns inte ett enda specifikt sätt att strukturera eller omstrukturera din applikation när du skapar paket. I den här artikeln kommer vi att följa det tillvägagångssätt som föreslås av
Stephan Hagemann i Gradvis modularisering för Ruby on Rails.

Välj projekt

Du kan skapa en ny projekt eller välj ett av dina projekt. Jag bestämde mig för att använda ett open source-projekt som heter KodTriage. Det är viktigt att nämna att vi behöver en Rails 6-applikation eftersom Packwerk använder Zeitwerk.

Initiera Packwerk

Först måste vi lägga till gemen i vår Gemfile på följande sätt pärla "packwerk och kör sedan bunti konsolen. Sedan är vi redo att initiera pärlan och köra packwerk init.

Efter det noterar vi att Packwerk genererade tre filer åt oss:

  • packwerk.yml

  • paket.yml

  • böjningar.yml

packwerk.yml är konfigurationsfilen för Packwerk där vi bland annat definierar inkluderade och exkluderade filer, listar laddningssökvägar och definierar böjningsfilen;

paket.yml är konfigurationsfilen för ett paket. I den här filen lägger vi till konfigurationen för gränserna för vårt paket. Alla mappar med package.yml kommer att identifieras som ett paket av Packwerk. Så där, ja, Packwerk skapade vår första
paketet och vi kallar det för rot paket.

böjningar.yml är där vi placerar våra anpassade böjningar och akronymer om vi använder dem.

Du kan läsa mer om filerna och deras konfiguration i
Packwerk.

Packwerk fastigheter

För att modularisering ska fungera behöver vi tre grundläggande egenskaper: en namngiven behållare, dess innehåll, och explicit Beroenden på andra behållare. Så låt oss definiera dessa egenskaper i Packwerk:

  • Namn: Namnet på ett paket är dess relativa sökväg från roten till
    ansökan.

  • Innehåll: När vi placerar en package.yml i en mapp, blir alla filer i mappen nu innehållet i paketet.

  • Beroenden: Vi kan definiera beroenden av andra paket genom att lägga till beroende-nyckeln i paket.yml.

En annan fil som inte ingår som standard men som rekommenderas är README. Den är viktig för att ge information om hur paketet används.

Slutet av avsnitt I

Konsultation inom digital produktutveckling

Läs mer om

GraphQL Ruby. Hur är det med prestanda?

Räls och andra transportmedel

Rails-utveckling med TMUX, Vim, Fzf + Ripgrep

Relaterade artiklar

Utveckling av programvara

Bygg framtidssäkrade webbappar: Insikter från The Codest:s expertteam

Upptäck hur The Codest utmärker sig genom att skapa skalbara, interaktiva webbapplikationer med banbrytande teknik som ger sömlösa användarupplevelser på alla plattformar. Läs om hur vår expertis driver digital omvandling och affärsutveckling...

DEKODEST
Utveckling av programvara

Topp 10 Lettlandsbaserade mjukvaruutvecklingsföretag

Läs mer om Lettlands främsta mjukvaruutvecklingsföretag och deras innovativa lösningar i vår senaste artikel. Upptäck hur dessa teknikledare kan hjälpa till att lyfta ditt företag.

thecodest
Lösningar för företag och uppskalningsföretag

Java Software Development Essentials: En guide till framgångsrik outsourcing

Utforska denna viktiga guide om framgångsrik outsourcing av Java-programvaruutveckling för att förbättra effektiviteten, få tillgång till expertis och driva projektframgång med The Codest.

thecodest
Utveckling av programvara

Den ultimata guiden till outsourcing i Polen

Den kraftiga ökningen av outsourcing i Polen drivs av ekonomiska, utbildningsmässiga och tekniska framsteg, vilket främjar IT-tillväxt och ett företagsvänligt klimat.

TheCodest
Lösningar för företag och uppskalningsföretag

Den kompletta guiden till verktyg och tekniker för IT-revision

IT-revisioner säkerställer säkra, effektiva och kompatibla system. Läs mer om hur viktiga de är genom att läsa hela artikeln.

Codest
Jakub Jakubowicz CTO och medgrundare

Prenumerera på vår kunskapsbas och håll dig uppdaterad om expertisen från IT-sektorn.

    Om oss

    The Codest - Internationellt mjukvaruutvecklingsföretag med teknikhubbar i Polen.

    Förenade kungariket - Huvudkontor

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

    Polen - Lokala tekniknav

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

      Codest

    • Hem
    • Om oss
    • Tjänster
    • Fallstudier
    • Vet hur
    • Karriär
    • Ordbok

      Tjänster

    • Det rådgivande
    • Utveckling av programvara
    • Backend-utveckling
    • Frontend-utveckling
    • Staff Augmentation
    • Backend-utvecklare
    • Ingenjörer inom molntjänster
    • Dataingenjörer
    • Övriga
    • QA-ingenjörer

      Resurser

    • Fakta och myter om att samarbeta med en extern partner för mjukvaruutveckling
    • Från USA till Europa: Varför väljer amerikanska startup-företag att flytta till Europa?
    • Jämförelse av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinerna), Eurasien (Turkiet)
    • Vilka är de största utmaningarna för CTO:er och CIO:er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Användarvillkor för webbplatsen

    Copyright © 2025 av The Codest. Alla rättigheter reserverade.

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