Μια γρήγορη εισαγωγή στην ένεση εξάρτησης: τι είναι και πότε να την χρησιμοποιήσετε

Φωτογραφία από rawpixel στο Unsplash

Εισαγωγή

Στη μηχανική λογισμικού, η ένεση εξάρτησης είναι μια τεχνική όπου ένα αντικείμενο (ή στατική μέθοδος) παρέχει τις εξαρτήσεις ενός άλλου αντικειμένου. Μια εξάρτηση είναι ένα αντικείμενο που μπορεί να χρησιμοποιηθεί (μια υπηρεσία).

Αυτός είναι ο ορισμός της Wikipedia, αλλά ακόμα, αλλά δεν είναι ιδιαίτερα εύκολο να καταλάβουμε. Ας το καταλάβουμε καλύτερα.

Πριν καταλάβουμε τι σημαίνει προγραμματισμός, ας δούμε πρώτα τι σημαίνει γενικά, καθώς θα μας βοηθήσει να κατανοήσουμε καλύτερα την ιδέα.

Η εξάρτηση ή τα εξαρτώμενα μέσα βασίζονται σε κάτι για υποστήριξη. Όπως λέω ότι βασιζόμαστε πάρα πολύ στα κινητά τηλέφωνα από ό, τι σημαίνει ότι είμαστε εξαρτημένοι από αυτά.

Έτσι, προτού φτάσουμε σε ενέσεις εξάρτησης, πρώτα καταλάβουμε τι σημαίνει εξάρτηση στον προγραμματισμό.

Όταν η κλάση Α χρησιμοποιεί κάποια λειτουργικότητα της κατηγορίας Β, τότε της αναφέρει ότι η κλάση Α έχει εξάρτηση της κατηγορίας Β.

Εμφάνιση εξαρτήσεων μεταξύ των τάξεων

Στην Java, προτού μπορέσουμε να χρησιμοποιήσουμε μεθόδους άλλων τάξεων, πρέπει πρώτα να δημιουργήσουμε το αντικείμενο αυτής της κλάσης (δηλαδή η κλάση Α πρέπει να δημιουργήσει μια παρουσία της κλάσης Β).

Επομένως, η μεταφορά του έργου δημιουργίας του αντικειμένου σε κάποιον άλλο και απευθείας χρήση της εξάρτησης ονομάζεται ένεση εξάρτησης.

Τι θα μπορούσε να μιλήσει ο κώδικας;

Γιατί πρέπει να χρησιμοποιήσω ένεση εξάρτησης;

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

Εδώ η κατηγορία των αυτοκινήτων είναι υπεύθυνη για τη δημιουργία όλων των αντικειμένων εξάρτησης. Τώρα, τι γίνεται αν αποφασίσουμε να χαράξουμε το MRFWheels στο μέλλον και θέλουμε να χρησιμοποιήσουμε τους τροχούς Yokohama;

Θα χρειαστεί να αναδημιουργήσουμε το αντικείμενο του αυτοκινήτου με μια νέα εξάρτηση από το Yokohama. Αλλά όταν χρησιμοποιούμε την ένεση εξάρτησης (DI), μπορούμε να αλλάξουμε τους Τροχοί κατά το χρόνο εκτέλεσης (επειδή οι εξαρτήσεις μπορούν να εγχυθούν κατά τη διάρκεια εκτέλεσης και όχι κατά τη διάρκεια της μεταγλώττισης).

Μπορείτε να σκεφτείτε τον DI ως τον μεσάζοντα στον κώδικα μας που κάνει όλη τη δουλειά της δημιουργίας των προτιμώμενων αντικειμένων των τροχών και την παράδοσή τους στην κατηγορία των αυτοκινήτων.

Κάνει την κατηγορία αυτοκινήτου μας ανεξάρτητη από τη δημιουργία αντικειμένων τροχών, μπαταρίας, κλπ.

Υπάρχουν βασικά τρεις τύποι ένεσης εξάρτησης:

  1. Έγχυση κατασκευαστή: οι εξαρτήσεις παρέχονται μέσω κατασκευαστή κλάσης.
  2. έγχυση ρυθμιστή: ο πελάτης εκθέτει μια μέθοδο καθορισμού που χρησιμοποιεί ο εγχυτήρας για την έγχυση της εξάρτησης.
  3. ενέσιμη διεπαφή: η εξάρτηση παρέχει μια μέθοδο εγχυτήρα που θα εισάγει την εξάρτηση σε κάθε πελάτη που θα περάσει σε αυτήν. Οι πελάτες πρέπει να εφαρμόσουν μια διεπαφή που εκθέτει μια μέθοδο setter που δέχεται την εξάρτηση.

Έτσι τώρα η ευθύνη της ένεσης της εξάρτησης είναι:

  1. Δημιουργήστε τα αντικείμενα
  2. Μάθετε ποιες κλάσεις απαιτούν αυτά τα αντικείμενα
  3. Και τους παρέχετε όλα αυτά τα αντικείμενα

Αν υπάρχει κάποια αλλαγή στα αντικείμενα, τότε το DI εξετάζει αυτό και δεν πρέπει να αφορά την τάξη που χρησιμοποιεί αυτά τα αντικείμενα. Με αυτόν τον τρόπο, εάν τα αντικείμενα αλλάξουν στο μέλλον, τότε η ευθύνη της DI είναι να παρέχει τα κατάλληλα αντικείμενα στην τάξη.

Αναστροφή ελέγχου - η ιδέα πίσω από το DI

Αυτό δηλώνει ότι μια κλάση δεν πρέπει να ρυθμίσει τις εξαρτήσεις της στατικά, αλλά θα πρέπει να ρυθμιστεί από κάποια άλλη κατηγορία από το εξωτερικό.

Είναι η πέμπτη αρχή της S.O.L.I.D - οι πέντε βασικές αρχές του αντικειμενοστρεφούς προγραμματισμού και σχεδίασης από τον θείο Bob - που δηλώνει ότι μια τάξη πρέπει να εξαρτάται από την αφαίρεση και όχι από τα concretions (με απλά λόγια, hard-coded).

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

Σημείωση: Εάν θέλετε να μάθετε για τις αρχές SOLID από τον θείο Bob τότε μπορείτε να κατευθυνθείτε προς αυτόν τον σύνδεσμο.

Οφέλη από τη χρήση του DI

  1. Βοηθά στη δοκιμή μονάδας.
  2. Ο κωδικός πλάκας λέβητα μειώνεται, καθώς η προετοιμασία των εξαρτήσεων γίνεται από το στοιχείο του μπεκ ψεκασμού.
  3. Η επέκταση της εφαρμογής γίνεται ευκολότερη.
  4. Βοηθά στην αποφυγή χαλαρής σύζευξης, η οποία είναι σημαντική στον προγραμματισμό εφαρμογών.

Μειονεκτήματα του DI

  1. Είναι λίγο περίπλοκο να μάθουμε και αν υπερχρησιμοποιηθεί μπορεί να οδηγήσει σε θέματα διαχείρισης και άλλα προβλήματα.
  2. Πολλά σφάλματα χρόνου μεταγλώττισης ωθούνται σε χρόνο εκτέλεσης.
  3. Τα πλαίσια εγχύσεων εξαρτήσεων εφαρμόζονται με αντανάκλαση ή δυναμικό προγραμματισμό. Αυτό μπορεί να εμποδίσει τη χρήση αυτοματοποίησης IDE, όπως "βρείτε αναφορές", "εμφάνιση ιεραρχίας κλήσεων" και ασφαλές refactoring.

Μπορείτε να εφαρμόσετε την ένεση εξάρτησης με δική σας (Pure Vanilla) ή να χρησιμοποιήσετε βιβλιοθήκες ή πλαίσια τρίτων.

Βιβλιοθήκες και Πλαίσια που εφαρμόζουν DI

  • Άνοιξη (Java)
  • Google Guice (Java)
  • Dagger (Java και Android)
  • Κάστρο Windsor (.NET)
  • Ενότητα (.NET)

Για να μάθετε περισσότερα σχετικά με την ένεση εξάρτησης, μπορείτε να δείτε τους παρακάτω πόρους:

Java Εξάρτηση Έγχυσης - DI Σχεδιασμός Pattern Παράδειγμα Tutorial - JournalDev

Χρήση ένεσης εξάρτησης από Java - Εισαγωγή - Εκμάθηση - Vogella

Αναστροφή των εμπορευματοκιβωτίων ελέγχου και πρότυπο έγχυσης εξαρτήσεων - Martin Fowler

Ελπίζω ότι βοηθά!

Εάν σας άρεσε το άρθρο και θέλετε να διαβάσετε περισσότερα εκπληκτικά άρθρα, τότε με ακολουθήστε εδώ (Bhavya Karia) και δείξτε την υποστήριξή σας καθώς με ενθαρρύνει να γράψω περισσότερα.

Εάν έχετε οποιεσδήποτε ερωτήσεις ή σχόλια για μένα, από το να συνδεθείτε στο LinkedIn, Twitter, Facebook.

Επεξεργασία 1:

Χάρη στον Sergey Ufocoder τώρα αυτό το άρθρο έχει μετατραπεί στη ρωσική γλώσσα. Οι Ρώσοι φίλοι μου και όλοι όσοι μπορούν να διαβάσουν τη ρωσική γλώσσα, το διαβάζουν.

Σύνδεση με το άρθρο

Επίσης, αν θέλετε να χρησιμοποιήσετε το DI στο JavaScript και ψάχνετε για μια βιβλιοθήκη, τότε ο Jo Surikat προτείνει να δοκιμάσετε τη βιβλιοθήκη του.

Di-Ninja

Μια ακόμη φοβερή DI βιβλιοθήκη στο JavaScript προτάθηκε από τον Nicolas Froidure.

knifecycle

Επεξεργασία 2:

Εάν είστε προγραμματιστής της PHP τότε μην ανησυχείτε, σας πήρε και εσείς κάλυψη. Ο Gordon Forsythe συνέστησε αυτή την εκπληκτική βιβλιοθήκη που όλοι θα θέλατε να δοκιμάσετε.

auryn

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

Εάν μάθατε ακόμη και ένα πράγμα ή δύο, χτυπήστε τα χέρια σας όσες φορές (50 ) όσο μπορείτε για να δείξετε την υποστήριξή σας!