(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'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'); thecodest, Författare på The Codest - Sida 9 av 13

Inledning

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

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.

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,
- Skapande 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,

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 Räls.

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 för oss:

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:

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

sv_SESwedish