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