(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, Forfatter på The Codest - Side 9 af 13

Introduktion

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

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.

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,
- At skabe 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,

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 Skinner.

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 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:

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

da_DKDanish