(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, Autor na The Codest - Strana 9 z 13

Úvod

Aby bylo možné mluvit o Packwerk, musíme si nejprve představit několik pojmů.

Problémy

Jak víme, Ruby neposkytuje dobré řešení pro vynucení hranic kódu. Můžeme určit viditelnost, ale všechny závislosti budou načteny do globálního jmenného prostoru. Ve velkých nebo monolitických aplikacích způsobuje tato absence hranic následující problémy.

Ve snaze modulovat monolit společnosti Shopify a prosadit hranice vyzkoušeli různá řešení, aniž by dosáhli očekávaných výsledků:
- Nastavení soukromých konstant,
- Stanovení hranic pomocí drahokamů,
- Použití testů k prevenci asociací mezi jednotlivými složkami,
- Použití modulačního drahokamu Ruby,
- Vytváření mikroslužby.

S využitím všech znalostí z předchozích pokusů se rozhodli vytvořit vlastní nástroj: Packwerk.

Packwerk

Co je Packwerk?

Packwerk je nástroj statické analýzy, který slouží k vynucení hranic mezi skupinami dat. Ruby soubory s názvem balíčky.

Co je to balíček?

A balíček je složka obsahující automaticky spouštěný kód. Shopify tým vyzývá k používání osvědčených postupů při vytváření balíčků.
- Měli bychom společně balit věci, které mají vysokou funkčnost soudržnost,

Typy hraničních kontrol

Můžeme vynucovat hranice soukromí a závislostí, kontrolovat jejich porušení a cyklické závislosti.

Packwerk do praxe

Neexistuje jediný konkrétní způsob, jak při vytváření balíčků strukturovat nebo změnit strukturu aplikace. V tomto článku se budeme řídit přístupem, který navrhuje
Stephan Hagemann v Postupná modularizace pro Ruby on Rails.

Výběr projektu

Můžete vytvořit nový projekt nebo si vyberte jeden ze svých projektů. Rozhodl jsem se použít open-source projekt s názvem CodeTriage. Je důležité zmínit, že potřebujeme aplikaci Rails 6, protože Packwerk používá Zeitwerk.

Inicializace systému Packwerk

Nejdříve musíme přidat gem do našeho souboru Gemfile, jako například gem 'packwerk' a pak spusťte svazekv konzole. Pak jsme připraveni inicializovat klenot, který běží packwerk init.

Poté si všimneme, že Packwerk vygeneroval tři soubory pro nás:

packwerk.yml je konfigurační soubor Packwerk kde mimo jiné definujeme zahrnuté a vyloučené soubory, uvedeme cesty pro načítání a definujeme skloňovací soubor;

package.yml je konfigurační soubor balíčku. V tomto souboru přidáme konfiguraci pro hranice našeho balíčku. Jakákoli složka se souborem package.yml bude rozpoznána jako balíček pomocí nástroje Packwerk. To je vše, Packwerk vytvořil náš první
a nazýváme jej root balíček.

inflections.yml je místo, kam umístíme naše vlastní skloňování a zkratky, pokud je budeme používat.

Více informací o souborech a jejich konfiguraci najdete v části
Packwerk.

Vlastnosti Packwerk

Aby modularizace fungovala, potřebujeme tři základní vlastnosti: pojmenovaný kontejner, jeho obsaha výslovně závislosti na jiných kontejnery. Definujme tedy tyto vlastnosti v Packwerk:

Dalším souborem, který není ve výchozím nastavení zahrnut, ale doporučuje se, je README. Je důležité, aby poskytoval informace o použití balíčku.

Konec epizody I

Poradenství v oblasti vývoje digitálních produktů

Přečtěte si více

GraphQL Ruby. Jak je to s výkonem?

Kolejnice a další dopravní prostředky

Vývoj Rails pomocí TMUX, Vim, Fzf + Ripgrep

cs_CZCzech