window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster już istnieje') } 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 }) }, } } })() Modularyzacja Ruby on Rails z Packwerk Epizod I - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2022-01-05
Software Development

Modularyzacja Ruby on Rails za pomocą Packwerk Episode I

Nicolas Nisoria

Ludziom trudno jest zobaczyć szerszy obraz problemu bez poświęcania dużej ilości czasu i wysiłku. Dzieje się tak zwłaszcza podczas pracy z dużymi i złożonymi aplikacjami. Jakie są skutki uboczne moich zmian? Dlaczego ta linia tutaj wpływa na testy odległej części bazy kodu? Idealne lub kompletne rozwiązanie nie istnieje, ale Shopify wypuściło narzędzie, które prawdopodobnie pomoże Tobie i Twojemu zespołowi.

Wprowadzenie

Aby porozmawiać o PackwerkMusimy jednak najpierw wprowadzić kilka pojęć.

  • Spójnośćodnosi się do miary tego, jak bardzo elementy w module lub klasie należą do siebie.
  • Sprzęgłoodnosi się do poziomu zależności między modułami lub klasami.
  • Graniceodnosi się do barier między kod. W tym przypadku granica kodu odnosi się do różnych domen w ramach tej samej bazy kodu.
  • ModularyzacjaProces dzielenia systemu oprogramowania na wiele oddzielnych modułów, z których każdy działa niezależnie.

Problemy

Jak wiemy, Ruby nie zapewnia dobrego rozwiązania do egzekwowania granic kodu. Możemy określić widoczność, ale wszystkie zależności zostaną załadowane do globalnej przestrzeni nazw. W dużych lub monolitycznych aplikacjach ten brak granic powoduje następujące problemy.

  • Niska spójność,
  • Wysokie sprzężenie,
  • Kod spaghetti.

Próbując modularyzować monolit Shopify i egzekwować granice, próbowali różnych rozwiązań, nie osiągając oczekiwanych rezultatów:
- Ustawianie stałych prywatnych,
- Ustalanie granic za pomocą klejnotów,
- Korzystanie z testów w celu zapobiegania powiązaniom między komponentami,
- Korzystanie z modulacji Ruby,
- Tworzenie mikrousług.

Mając całą wiedzę z poprzednich prób, postanowili stworzyć własne narzędzie: Packwerk.

Packwerk

Czym jest Packwerk?

Packwerk jest narzędziem analizy statycznej używanym do wymuszania granic między grupami Ruby pliki o nazwie pakiety.

Co to jest pakiet?

A pakiet to folder zawierający automatycznie ładowany kod. Shopify's zespół zachęca do stosowania najlepszych praktyk projektowych podczas tworzenia pakietów.
- Powinniśmy pakować razem rzeczy, które mają wysoką funkcjonalność spójność,

  • Pakiety powinny być ze sobą stosunkowo luźno powiązane.

Rodzaje kontroli granicznych

Możemy egzekwować granice prywatności i zależności, sprawdzać naruszenia granic i zależności cyklicznych.

Packwerk w praktyce

Nie ma jednego konkretnego sposobu na ustrukturyzowanie lub zrestrukturyzowanie aplikacji podczas tworzenia pakietów. W tym artykule będziemy postępować zgodnie z podejściem sugerowanym przez
Stephan Hagemann w Stopniowa modularyzacja dla Ruby on Rails.

Wybierz projekt

Można utworzyć nowy projekt lub wybrać jeden ze swoich projektów. Zdecydowałem się użyć projektu open-source o nazwie CodeTriage. Ważne jest, aby wspomnieć, że potrzebujemy aplikacji Rails 6, ponieważ Packwerk używa Zeitwerk.

Inicjalizacja Packwerk

Najpierw musimy dodać gem do naszego pliku Gemfile w następujący sposób gem 'packwerk' a następnie uruchomić pakietw konsoli. Następnie jesteśmy gotowi do zainicjowania uruchomionego gema packwerk init.

Następnie zauważamy, że Packwerk wygenerował dla nas trzy pliki:

  • packwerk.yml

  • package.yml

  • inflections.yml

packwerk.yml jest plikiem konfiguracyjnym Packwerk gdzie zdefiniujemy między innymi pliki dołączone i wykluczone, listę ścieżek ładowania, zdefiniujemy plik fleksji;

package.yml jest plikiem konfiguracyjnym pakietu. W tym pliku dodamy konfigurację dla granic naszego pakietu. Każdy folder z package.yml zostanie rozpoznany jako pakiet przez Packwerk. To wszystko, Packwerk stworzył nasz pierwszy
i nazywamy go pakietem korzeń pakiet.

inflections.yml to miejsce, w którym umieścimy nasze niestandardowe fleksje i akronimy na wypadek, gdybyśmy ich używali.

Więcej informacji na temat plików i ich konfiguracji można znaleźć na stronie
Packwerk.

Właściwości Packwerk

Aby modularyzacja działała, potrzebujemy trzech podstawowych właściwości: nazwany kontenerjego zawartośći wyraźnie zależności na innych pojemniki. Zdefiniujmy więc te właściwości w Packwerk:

  • Nazwa: Nazwa pakietu to jego względna ścieżka z katalogu głównego
    aplikacja.

  • Treść: Kiedy umieszczamy package.yml w folderze, wszystkie pliki w folderze są teraz zawartością pakietu.

  • Zależności: Możemy zdefiniować zależności od innych pakietów dodając klucz zależności do pliku package.yml.

Innym plikiem, który nie jest dołączany domyślnie, ale jest zalecany, jest README. Ważne jest, aby dostarczyć informacji na temat korzystania z pakietu.

Koniec odcinka I

Doradztwo w zakresie rozwoju produktów cyfrowych

Czytaj więcej

GraphQL Ruby. Co z wydajnością?

Szyny i inne środki transportu

Rails Development z TMUX, Vim, Fzf + Ripgrep

Powiązane artykuły

Software Development

Tworzenie przyszłościowych aplikacji internetowych: spostrzeżenia zespołu ekspertów The Codest

Odkryj, w jaki sposób The Codest wyróżnia się w tworzeniu skalowalnych, interaktywnych aplikacji internetowych przy użyciu najnowocześniejszych technologii, zapewniając płynne doświadczenia użytkowników na wszystkich platformach. Dowiedz się, w jaki sposób nasza wiedza napędza transformację cyfrową i biznes...

THEECODEST
Software Development

10 najlepszych firm tworzących oprogramowanie na Łotwie

Dowiedz się więcej o najlepszych łotewskich firmach programistycznych i ich innowacyjnych rozwiązaniach w naszym najnowszym artykule. Odkryj, w jaki sposób ci liderzy technologiczni mogą pomóc w rozwoju Twojej firmy.

thecodest
Rozwiązania dla przedsiębiorstw i scaleupów

Podstawy tworzenia oprogramowania Java: Przewodnik po skutecznym outsourcingu

Zapoznaj się z tym niezbędnym przewodnikiem na temat skutecznego tworzenia oprogramowania Java outsourcing, aby zwiększyć wydajność, uzyskać dostęp do wiedzy specjalistycznej i osiągnąć sukces projektu z The Codest.

thecodest
Software Development

Kompletny przewodnik po outsourcingu w Polsce

Wzrost liczby outsourcing w Polsce jest napędzany przez postęp gospodarczy, edukacyjny i technologiczny, sprzyjający rozwojowi IT i przyjazny klimat dla biznesu.

TheCodest
Rozwiązania dla przedsiębiorstw i scaleupów

Kompletny przewodnik po narzędziach i technikach audytu IT

Audyty IT zapewniają bezpieczne, wydajne i zgodne z przepisami systemy. Dowiedz się więcej o ich znaczeniu, czytając cały artykuł.

The Codest
Jakub Jakubowicz CTO & Współzałożyciel

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest - Międzynarodowa firma programistyczna z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA
      Londyn, Anglia

    Polska - lokalne centra technologiczne

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

      The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

      Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

      Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2025 by The Codest. Wszelkie prawa zastrzeżone.

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