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 υπάρχει ήδη') } 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 modularization με Packwerk Επεισόδιο I - The Codest
The Codest
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Βιομηχανίες
    • Fintech & Τραπεζική
    • E-commerce
    • Adtech
    • Healthtech
    • Κατασκευή
    • Εφοδιαστική
    • Αυτοκίνητο
    • IOT
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
Πίσω βέλος GO BACK
2022-01-05
Ανάπτυξη λογισμικού

Ruby on Rails modularization με Packwerk Επεισόδιο I

Nicolas Nisoria

Οι άνθρωποι δυσκολεύονται να δουν τη μεγάλη εικόνα ενός προβλήματος χωρίς να αφιερώσουν πολύ χρόνο και προσπάθεια. Αυτό συμβαίνει ιδιαίτερα όταν εργάζονται με μεγάλες και πολύπλοκες εφαρμογές. Ποιες είναι οι παρενέργειες των αλλαγών μου; Γιατί αυτή η γραμμή εδώ επηρεάζει τις δοκιμές ενός απομακρυσμένου τμήματος της βάσης κώδικα; Μια τέλεια ή πλήρης λύση δεν υπάρχει, αλλά το Shopify κυκλοφόρησε ένα εργαλείο που πιθανώς θα βοηθήσει εσάς και την ομάδα σας.

Εισαγωγή

Για να μιλήσουμε για Packwerk, πρέπει πρώτα να παρουσιάσουμε μερικές έννοιες.

  • Συνοχή: αναφέρεται στο μέτρο του κατά πόσο τα στοιχεία μιας ενότητας ή κλάσης ανήκουν μεταξύ τους.
  • Σύζευξη: αναφέρεται στο επίπεδο εξάρτησης μεταξύ ενοτήτων ή κλάσεων.
  • Όρια: αναφέρεται σε εμπόδια μεταξύ κωδικός. Στην περίπτωση αυτή, ένα όριο κώδικα αναφέρεται σε διαφορετικούς τομείς ενδιαφέροντος εντός της ίδιας βάσης κώδικα.
  • Αρθρωτή διαμόρφωση: η διαδικασία διαίρεσης ενός συστήματος λογισμικού σε πολλαπλές ξεχωριστές ενότητες, όπου κάθε ενότητα λειτουργεί ανεξάρτητα.

Προβλήματα

Όπως γνωρίζουμε, Ruby δεν παρέχει μια καλή λύση για την επιβολή των ορίων του κώδικα. Μπορούμε να καθορίσουμε την ορατότητα, αλλά όλες οι εξαρτήσεις θα φορτωθούν στον παγκόσμιο χώρο ονομάτων. Σε μεγάλες ή μονολιθικές εφαρμογές, αυτή η έλλειψη ορίων παράγει τα ακόλουθα προβλήματα.

  • Χαμηλή συνοχή,
  • Υψηλή σύζευξη,
  • Κώδικας σπαγγέτι.

Σε μια προσπάθεια να αρθρωθεί ο μονόλιθος του Shopify και να επιβληθούν όρια, δοκίμασαν διαφορετικές λύσεις χωρίς να επιτύχουν τα αναμενόμενα αποτελέσματα:
- Ορισμός ιδιωτικών σταθερών,
- Καθιέρωση ορίων μέσω πολύτιμων λίθων,
- Χρήση δοκιμών για την αποτροπή συσχετίσεων μεταξύ συστατικών,
- Χρησιμοποιώντας το διαμαντάκι διαμόρφωσης της Ruby,
- Δημιουργία μικρουπηρεσιών.

Με όλη τη γνώση από προηγούμενες προσπάθειες, αποφάσισαν να δημιουργήσουν το δικό τους εργαλείο: Packwerk.

Packwerk

Τι είναι το Packwerk;

Packwerk είναι ένα εργαλείο στατικής ανάλυσης που χρησιμοποιείται για την επιβολή ορίων μεταξύ ομάδων Ruby αρχεία που ονομάζονται πακέτα.

Τι είναι ένα πακέτο;

A πακέτο είναι ένας φάκελος που περιέχει κώδικα με αυτόματη φόρτωση. Το Shopify's ομάδα ενθαρρύνει τη χρήση των βέλτιστων πρακτικών σχεδιασμού κατά τη δημιουργία πακέτων.
- Θα πρέπει να συσκευάσουμε μαζί πράγματα που έχουν υψηλή λειτουργικότητα συνοχή,

  • Τα πακέτα θα πρέπει να είναι σχετικά χαλαρά συνδεδεμένα μεταξύ τους.

Τύποι ελέγχων ορίων

Μπορούμε να επιβάλλουμε όρια απορρήτου και εξαρτήσεων, να ελέγχουμε παραβιάσεις των ορίων και κυκλικές εξαρτήσεις.

Packwerk στην πράξη

Δεν υπάρχει ένας μόνο συγκεκριμένος τρόπος για να δομήσετε ή να αναδιαρθρώσετε την εφαρμογή σας κατά τη δημιουργία πακέτων. Σε αυτό το άρθρο, θα ακολουθήσουμε την προσέγγιση που προτείνεται από το
Stephan Hagemann στο Βαθμιαία διαμόρφωση για το Ruby on Rails.

Επιλέξτε το έργο

Μπορείτε να δημιουργήσετε ένα νέο έργο ή επιλέξτε ένα από τα έργα σας. Αποφάσισα να χρησιμοποιήσω ένα έργο ανοικτού κώδικα που ονομάζεται CodeTriage. Είναι σημαντικό να αναφέρουμε ότι χρειαζόμαστε μια εφαρμογή Rails 6 αφού Packwerk χρησιμοποιεί το Zeitwerk.

Αρχικοποίηση του Packwerk

Πρώτα, πρέπει να προσθέσουμε το gem στο Gemfile μας όπως πολύτιμος λίθος 'packwerk' και στη συνέχεια εκτελέστε δέσμηστην κονσόλα. Στη συνέχεια, είμαστε έτοιμοι να αρχικοποιήσουμε την εκτέλεση του πολύτιμου λίθου packwerk init.

Μετά από αυτό, παρατηρούμε ότι Packwerk δημιούργησε τρία αρχεία για εμάς:

  • packwerk.yml

  • package.yml

  • κλίσεις.yml

packwerk.yml είναι το αρχείο ρυθμίσεων του Packwerk όπου θα ορίσουμε τα συμπεριλαμβανόμενα και εξαιρούμενα αρχεία, θα απαριθμήσουμε τις διαδρομές φόρτωσης, θα ορίσουμε το αρχείο κλίσεων, μεταξύ άλλων,

package.yml είναι το αρχείο ρυθμίσεων ενός πακέτου. Σε αυτό το αρχείο, θα προσθέσουμε τις ρυθμίσεις για τα όρια του πακέτου μας. Οποιοσδήποτε φάκελος με το package.yml θα αναγνωριστεί ως πακέτο από το Packwerk. Αυτό είναι όλο, Packwerk δημιούργησε το πρώτο μας
πακέτο και το ονομάζουμε ρίζα πακέτο.

κλίσεις.yml είναι το σημείο όπου θα τοποθετήσουμε τις προσαρμοσμένες κλίσεις και τα ακρωνύμια μας σε περίπτωση που τα χρησιμοποιούμε.

Μπορείτε να μάθετε περισσότερα για τα αρχεία και τη διαμόρφωσή τους στο
Packwerk.

Ιδιότητες Packwerk

Για να λειτουργήσει η σπονδυλοποίηση χρειαζόμαστε τρεις βασικές ιδιότητες: ένα δοχείο με όνομα, το περιεχόμενο, και ρητή εξαρτήσεις σε άλλα εμπορευματοκιβώτια. Ας ορίσουμε λοιπόν αυτές τις ιδιότητες στο Packwerk:

  • Όνομα: Το όνομα ενός πακέτου είναι η σχετική διαδρομή του από τη ρίζα του
    εφαρμογή.

  • Περιεχόμενο: Όταν τοποθετούμε ένα package.yml σε έναν φάκελο, όλα τα αρχεία του φακέλου αποτελούν πλέον το περιεχόμενο του πακέτου.

  • Εξαρτήσεις: Μπορούμε να ορίσουμε εξαρτήσεις από άλλα πακέτα προσθέτοντας το κλειδί dependencies στο package.yml.

Ένα άλλο αρχείο που δεν περιλαμβάνεται από προεπιλογή αλλά συνιστάται είναι το README. Είναι σημαντικό να παρέχει πληροφορίες σχετικά με τη χρήση του πακέτου.

Το τέλος του επεισοδίου Ι

Συμβουλευτική για την ανάπτυξη ψηφιακών προϊόντων

Διαβάστε περισσότερα

GraphQL Ruby. Τι γίνεται με τις επιδόσεις;

Σιδηρόδρομοι και άλλα μέσα μεταφοράς

Ανάπτυξη Rails με TMUX, Vim, Fzf + Ripgrep

Σχετικά άρθρα

Ανάπτυξη λογισμικού

Κατασκευάστε μελλοντικά ασφαλείς εφαρμογές Web: γνώσεις από την ομάδα εμπειρογνωμόνων του The Codest

Ανακαλύψτε πώς η The Codest υπερέχει στη δημιουργία κλιμακούμενων, διαδραστικών εφαρμογών ιστού με τεχνολογίες αιχμής, παρέχοντας απρόσκοπτη εμπειρία χρήστη σε όλες τις πλατφόρμες. Μάθετε πώς η τεχνογνωσία μας οδηγεί στον ψηφιακό μετασχηματισμό και την επιχειρηματική...

THECODEST
Ανάπτυξη λογισμικού

Top 10 εταιρείες ανάπτυξης λογισμικού με έδρα τη Λετονία

Μάθετε για τις κορυφαίες εταιρείες ανάπτυξης λογισμικού της Λετονίας και τις καινοτόμες λύσεις τους στο τελευταίο μας άρθρο. Ανακαλύψτε πώς αυτοί οι τεχνολογικοί ηγέτες μπορούν να βοηθήσουν στην ανύψωση της επιχείρησής σας.

thecodest
Λύσεις Enterprise & Scaleups

Βασικά στοιχεία ανάπτυξης λογισμικού Java: Α Guide to Outsourcing Successfully (Οδηγός για την επιτυχή εξωτερική ανάθεση)

Εξερευνήστε αυτόν τον βασικό οδηγό για την επιτυχή ανάπτυξη λογισμικού outsourcing Java για να αυξήσετε την αποδοτικότητα, να αποκτήσετε πρόσβαση στην τεχνογνωσία και να οδηγήσετε την επιτυχία των έργων με The Codest.

thecodest
Ανάπτυξη λογισμικού

Ο απόλυτος οδηγός για το Outsourcing στην Πολωνία

Η έξαρση της outsourcing στην Πολωνία οφείλεται στις οικονομικές, εκπαιδευτικές και τεχνολογικές εξελίξεις, που ευνοούν την ανάπτυξη της πληροφορικής και το φιλικό προς τις επιχειρήσεις κλίμα.

TheCodest
Λύσεις Enterprise & Scaleups

Ο πλήρης οδηγός εργαλείων και τεχνικών ελέγχου πληροφορικής

Οι έλεγχοι ΤΠ διασφαλίζουν ασφαλή, αποτελεσματικά και συμβατά συστήματα. Μάθετε περισσότερα για τη σημασία τους διαβάζοντας ολόκληρο το άρθρο.

The Codest
Jakub Jakubowicz CTO & Συνιδρυτής

Εγγραφείτε στη βάση γνώσεών μας και μείνετε ενήμεροι για την τεχνογνωσία από τον τομέα της πληροφορικής.

    Σχετικά με εμάς

    The Codest - Διεθνής εταιρεία ανάπτυξης λογισμικού με κέντρα τεχνολογίας στην Πολωνία.

    Ηνωμένο Βασίλειο - Έδρα

    • Γραφείο 303B, 182-184 High Street North E6 2JA
      Λονδίνο, Αγγλία

    Πολωνία - Τοπικοί κόμβοι τεχνολογίας

    • Πάρκο γραφείων Fabryczna, Aleja
      Pokoju 18, 31-564 Κρακοβία
    • Πρεσβεία του εγκεφάλου, Konstruktorska
      11, 02-673 Βαρσοβία, Πολωνία

      The Codest

    • Αρχική σελίδα
    • Σχετικά με εμάς
    • Υπηρεσίες
    • Case Studies
    • Μάθετε πώς
    • Καριέρα
    • Λεξικό

      Υπηρεσίες

    • Συμβουλευτική
    • Ανάπτυξη λογισμικού
    • Backend Ανάπτυξη
    • Ανάπτυξη Frontend
    • Staff Augmentation
    • Backend Developers
    • Μηχανικοί cloud
    • Μηχανικοί δεδομένων
    • Άλλα
    • Μηχανικοί QA

      Πόροι

    • Γεγονότα και μύθοι σχετικά με τη συνεργασία με εξωτερικό συνεργάτη ανάπτυξης λογισμικού
    • Από τις ΗΠΑ στην Ευρώπη: Γιατί οι αμερικανικές νεοσύστατες επιχειρήσεις αποφασίζουν να μετεγκατασταθούν στην Ευρώπη
    • Σύγκριση υπεράκτιων κόμβων ανάπτυξης τεχνολογίας: Ευρώπη (Πολωνία), ASEAN (Φιλιππίνες), Ευρασία (Τουρκία)
    • Ποιες είναι οι κορυφαίες προκλήσεις των CTOs και των CIOs;
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Πνευματικά δικαιώματα © 2025 από The Codest. Όλα τα δικαιώματα διατηρούνται.

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