Μια γρήγορη εισαγωγή στο Dependency Injection: τι είναι και πότε να το χρησιμοποιήσετε

Εισαγωγή

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Java Dependency Injection - Παράδειγμα σχεδίασης DI Design Tutorial - JournalDev

Χρησιμοποιώντας ένεση εξάρτησης σε Java - Εισαγωγή - Tutorial - Vogella

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

Ελπίζω να βοηθήσει!

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

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

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

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

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

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

Ντι-Νίντζα

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

κύκλος μαχαιριών

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

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

auryn

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

Εάν μάθατε ακόμη και ένα ή δύο πράγματα, μοιραστείτε αυτήν την ιστορία!