window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } 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 }) }, } } })() Ruby on Rails modularizzazione con Packwerk Episodio I - The Codest
The Codest
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Industrie
    • Fintech e banche
    • E-commerce
    • Adtech
    • Tecnologia della salute
    • Produzione
    • Logistica
    • Automotive
    • IOT
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
Freccia indietro TORNA INDIETRO
2022-01-05
Sviluppo di software

Modularizzazione della Ruby on Rails con Packwerk Episodio I

Nicolas Nisoria

Gli esseri umani hanno difficoltà a vedere il quadro generale di un problema senza dedicare molto tempo e sforzi. Questo accade soprattutto quando si lavora con applicazioni grandi e complesse. Quali sono gli effetti collaterali delle mie modifiche? Perché questa linea qui influisce sui test di una parte remota della base di codice? Una soluzione perfetta o completa non esiste, ma Shopify ha presentato uno strumento che probabilmente aiuterà voi e il vostro team.

Introduzione

Per parlare di PackwerkÈ necessario introdurre prima alcuni concetti.

  • Coesione: si riferisce alla misura di quanto gli elementi di un modulo o di una classe appartengono tra loro.
  • AccoppiamentoSi riferisce al livello di dipendenza tra moduli o classi.
  • ConfiniSi riferisce alle barriere tra codice. In questo caso, un confine di codice si riferisce a diversi domini di interesse all'interno della stessa base di codice.
  • Modularizzazione: il processo di suddivisione di un sistema software in più moduli separati, dove ogni modulo funziona in modo indipendente.

Problemi

Come sappiamo, Rubino non fornisce una buona soluzione per far rispettare i confini del codice. Possiamo specificare la visibilità, ma tutte le dipendenze saranno caricate nello spazio dei nomi globale. Nelle applicazioni grandi o monolitiche, questa mancanza di confini produce i seguenti problemi.

  • Bassa coesione,
  • Accoppiamento alto,
  • Codice Spaghetti.

Nel tentativo di modularizzare il monolite di Shopify e di imporre dei confini, hanno provato diverse soluzioni senza ottenere i risultati sperati:
- Impostazione di costanti private,
- Stabilire i confini attraverso le gemme,
- Utilizzare i test per prevenire le associazioni tra componenti,
- Utilizzo della gemma Modulation di Ruby,
- Creare microservizi.

Con tutte le conoscenze acquisite nei precedenti tentativi, hanno deciso di creare il proprio strumento: Packwerk.

Packwerk

Che cos'è il Packwerk?

Packwerk è uno strumento di analisi statica utilizzato per imporre dei confini tra gruppi di Rubino file chiamati pacchetti.

Che cos'è un pacchetto?

A pacchetto è una cartella contenente codice autocaricato. La cartella di Shopify squadra incoraggia a utilizzare le migliori pratiche di progettazione durante la creazione dei pacchetti.
- Dovremmo imballare insieme le cose che hanno un'alta funzionalità coesione,

  • I pacchetti devono essere accoppiati tra loro in modo relativamente poco rigido.

Tipi di controlli di frontiera

Possiamo imporre confini di privacy e di dipendenza, verificare le violazioni dei confini e le dipendenze cicliche.

Packwerk in pratica

Non esiste un unico modo specifico per strutturare o ri-strutturare l'applicazione durante la creazione dei pacchetti. In questo articolo, seguiremo l'approccio suggerito da
Stephan Hagemann in Modularizzazione graduale per Ruby on Rails.

Scegliere il progetto

È possibile creare un nuovo progetto oppure scegliete uno dei vostri progetti. Ho deciso di utilizzare un progetto open-source chiamato CodiceTriage. È importante sottolineare che abbiamo bisogno di un'applicazione Rails 6 poiché Packwerk utilizza Zeitwerk.

Inizializzare Packwerk

Per prima cosa, dobbiamo aggiungere il gem al nostro Gemfile come gemma "packwerk e poi eseguire fagottonella console. Siamo quindi pronti a inizializzare la gemma eseguendo packwerk init.

Successivamente, notiamo che Packwerk ha generato tre file per noi:

  • packwerk.yml

  • pacchetto.yml

  • inflessioni.yml

packwerk.yml è il file di configurazione di Packwerk dove si definiscono i file inclusi ed esclusi, si elencano i percorsi di caricamento, si definisce il file delle inflessioni e altro ancora;

pacchetto.yml è il file di configurazione di un pacchetto. In questo file, aggiungeremo la configurazione dei confini del nostro pacchetto. Qualsiasi cartella con package.yml sarà riconosciuta come pacchetto da Packwerk. Ecco fatto, Packwerk ha creato il nostro primo
e lo chiamiamo pacchetto radice pacchetto.

inflessioni.yml è il luogo in cui collocheremo le nostre inflessioni e acronimi personalizzati, nel caso in cui li utilizzassimo.

Per ulteriori informazioni sui file e sulla loro configurazione, consultare la sezione
Packwerk.

Proprietà Packwerk

Affinché la modularizzazione funzioni, sono necessarie tre proprietà fondamentali: un contenitore con nome, il suo contenuto, ed esplicita dipendenze su altri contenitori. Definiamo quindi queste proprietà in Packwerk:

  • Nome: Il nome di un pacchetto è il suo percorso relativo a partire dalla radice del file
    applicazione.

  • Contenuto: Quando si inserisce un package.yml in una cartella, tutti i file presenti nella cartella sono ora il contenuto del pacchetto.

  • Dipendenze: Possiamo definire le dipendenze da altri pacchetti aggiungendo la chiave dependencies al file pacchetto.yml.

Un altro file che non è incluso di default, ma che è consigliato, è README. È importante per fornire informazioni sull'uso del pacchetto.

La fine dell'Episodio I

Consulenza per lo sviluppo di prodotti digitali

Per saperne di più

GraphQL Ruby. E le prestazioni?

Rotaie e altri mezzi di trasporto

Sviluppo di Rails con TMUX, Vim, Fzf + Ripgrep

Articoli correlati

Sviluppo di software

Costruire applicazioni web a prova di futuro: le intuizioni del team di esperti di The Codest

Scoprite come The Codest eccelle nella creazione di applicazioni web scalabili e interattive con tecnologie all'avanguardia, offrendo esperienze utente senza soluzione di continuità su tutte le piattaforme. Scoprite come la nostra esperienza favorisce la trasformazione digitale e il business...

IL CANCRO
Sviluppo di software

Le 10 principali aziende di sviluppo software con sede in Lettonia

Scoprite le migliori aziende di sviluppo software della Lettonia e le loro soluzioni innovative nel nostro ultimo articolo. Scoprite come questi leader tecnologici possono aiutarvi a migliorare la vostra attività.

thecodest
Soluzioni per aziende e scaleup

Essenziali di sviluppo software Java: Guida all'outsourcing di successo

Esplorate questa guida essenziale sullo sviluppo di software Java con successo outsourcing per migliorare l'efficienza, accedere alle competenze e guidare il successo del progetto con The Codest.

thecodest
Sviluppo di software

La guida definitiva all'outsourcing in Polonia

L'aumento di outsourcing in Polonia è guidato dai progressi economici, educativi e tecnologici, che favoriscono la crescita dell'IT e un clima favorevole alle imprese.

IlCodesto
Soluzioni per aziende e scaleup

Guida completa agli strumenti e alle tecniche di audit IT

Gli audit IT garantiscono sistemi sicuri, efficienti e conformi. Per saperne di più sulla loro importanza, leggete l'articolo completo.

The Codest
Jakub Jakubowicz CTO e cofondatore

Iscrivetevi alla nostra knowledge base e rimanete aggiornati sulle competenze del settore IT.

    Chi siamo

    The Codest - Società internazionale di sviluppo software con centri tecnologici in Polonia.

    Regno Unito - Sede centrale

    • Ufficio 303B, 182-184 High Street North E6 2JA
      Londra, Inghilterra

    Polonia - Poli tecnologici locali

    • Parco uffici Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Ambasciata del cervello, Konstruktorska
      11, 02-673 Varsavia, Polonia

      The Codest

    • Casa
    • Chi siamo
    • Servizi
    • Case Studies
    • Sapere come
    • Carriera
    • Dizionario

      Servizi

    • Consulenza
    • Sviluppo di software
    • Sviluppo backend
    • Sviluppo Frontend
    • Staff Augmentation
    • Sviluppatori backend
    • Ingegneri del cloud
    • Ingegneri dei dati
    • Altro
    • Ingegneri QA

      Risorse

    • Fatti e miti sulla collaborazione con un partner esterno per lo sviluppo di software
    • Dagli Stati Uniti all'Europa: Perché le startup americane decidono di trasferirsi in Europa
    • Confronto tra gli hub di sviluppo Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filippine), Eurasia (Turchia)
    • Quali sono le principali sfide di CTO e CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condizioni di utilizzo del sito web

    Copyright © 2025 di The Codest. Tutti i diritti riservati.

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