Τι είναι η αντιστροφή του ελέγχου;

ψήφοι
1k

Αντιστροφή του ελέγχου (ή ΔΟΕ) μπορεί να είναι αρκετά συγκεχυμένη, όταν για πρώτη φορά αντιμετώπισε.

  1. Τι είναι αυτό?
  2. Τι προβλήματα έχει να λύσει;
  3. Πότε είναι κατάλληλη και πότε όχι;
Δημοσιεύθηκε 06/08/2008 στις 04:35
πηγή χρήστη
Σε άλλες γλώσσες...                            


32 απαντήσεις

ψήφοι
1k

Η Αντιστροφή Ελέγχου (ΔΟΕ) και την εξάρτηση Injection (DI) σχέδια είναι όλα σχετικά με την κατάργηση εξαρτήσεις από τον κώδικά σας.

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

public class TextEditor {

    private SpellChecker checker;

    public TextEditor() {
        this.checker = new SpellChecker();
    }
}

Αυτό που κάναμε εδώ δημιουργεί μια εξάρτηση μεταξύ του TextEditorκαι του SpellChecker. Σε ένα σενάριο ΔΟΕ θα κάνουμε, αντί κάτι σαν αυτό:

public class TextEditor {

    private IocSpellChecker checker;

    public TextEditor(IocSpellChecker checker) {
        this.checker = checker;
    }
}

Στο πρώτο παράδειγμα κώδικα είμαστε εμφανίσεων SpellChecker( this.checker = new SpellChecker();), πράγμα που σημαίνει ότι η TextEditorτάξη εξαρτάται άμεσα από το SpellCheckerτάξη.

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

SpellChecker sc = new SpellChecker; // dependency
TextEditor textEditor = new TextEditor(sc);

Τώρα ο πελάτης δημιουργεί την TextEditorτάξη έχει τον έλεγχο επί των οποίων SpellCheckerεφαρμογή να χρησιμοποιήσει, επειδή είμαστε ένεση την εξάρτηση με την TextEditorυπογραφή.

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

Απαντήθηκε 06/08/2008 στις 08:22
πηγή χρήστη

ψήφοι
485

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

Για παράδειγμα, σε ένα παλιό μενού σχολείο, μπορεί να έχετε:

print "enter your name"
read name
print "enter your address"
read address
etc...
store in database

ελέγχοντας έτσι τη ροή του αλληλεπίδραση του χρήστη.

Σε ένα πρόγραμμα GUI ή somesuch, αντί να λέμε

when the user types in field a, store it in NAME
when the user types in field b, store it in ADDRESS
when the user clicks the save button, call StoreInDatabase

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

Βασικά, τίποτα με έναν βρόχο εκδήλωση, callbacks, ή να εκτελέσει ενεργοποιεί εμπίπτει σε αυτή την κατηγορία.

Απαντήθηκε 06/08/2008 στις 06:42
πηγή χρήστη

ψήφοι
356

Τι είναι η αντιστροφή του ελέγχου;

Αν ακολουθήσετε αυτές τις απλές δύο βήματα, έχετε κάνει αναστροφή του ελέγχου:

  1. Ξεχωριστή τι -να-do μέρος από όταν -σε-do μέρος.
  2. Βεβαιωθείτε ότι όταν μέρος γνωρίζει το μικρό δυνατό για ποιο μέρος? και αντίστροφα.

Υπάρχουν διάφορες τεχνικές δυνατόν για κάθε ένα από αυτά τα βήματα με βάση την τεχνολογία / γλώσσα που χρησιμοποιείτε για την εφαρμογή σας.

-

Η αντιστροφή μέρος της Αντιστροφή Ελέγχου (ΔΟΕ) είναι η σύγχυση πράγμα? επειδή αναστροφή είναι η σχετική όρος. Ο καλύτερος τρόπος για να κατανοήσουμε ΔΟΕ είναι να ξεχάσουμε αυτή τη λέξη!

-

Παραδείγματα

  • Χειρισμός συμβάντων. Χειρισμού συμβάντων (τι-να-κάνει μέρος) - Αύξηση Εκδηλώσεις (όταν-to-do μέρος)
  • Διασυνδέσεις. πελάτη Component (όταν-to-do μέρος) - εφαρμογή Interface Component (τι-να-κάνουμε μέρος)
  • xUnit fixure. Ρύθμιση και teardown (τι-να-κάνει μέρος) - πλαίσια xUnit κλήσεις προς εγκατάσταση στην αρχή και teardown στο τέλος (όταν-to-do μέρος)
  • Πρότυπο πρότυπο σχεδιασμού μέθοδο. Μέθοδος πρότυπο όταν με κάνετε το μέρος - πρωτόγονη εφαρμογή υποκατηγορία τι-να-κάνει από την πλευρά
  • μέθοδοι δοχείο DLL στο COM. DllMain, DllCanUnload, κλπ (τι-να-κάνει μέρος) - COM / OS (όταν-to-do μέρος)
Απαντήθηκε 22/07/2010 στις 18:34
πηγή χρήστη

ψήφοι
81

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

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

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

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

Απαντήθηκε 25/09/2013 στις 15:24
πηγή χρήστη

ψήφοι
77

Αντιστροφή του ελέγχου, (ή ΔΟΕ), είναι για να πάρει την ελευθερία (Μπορείτε να παντρευτούν, θα χάσει την ελευθερία και που ελέγχονται. Μπορείτε χώρισε, που μόλις εφαρμοστούν Αντιστροφή του ελέγχου. Αυτό είναι ό, τι λέγεται, «αποσυνδεδεμένες». Καλό σύστημα του υπολογιστή αποθαρρύνει κάποια πολύ στενή σχέση.) μεγαλύτερη ευελιξία (κουζίνα στο γραφείο σας χρησιμεύει μόνο νερό καθαρό βρύση, αυτή είναι η μόνη επιλογή σας όταν θέλετε να πιείτε. το αφεντικό σας υλοποιηθεί Αντιστροφή του ελέγχου με τη δημιουργία μιας νέας μηχανής καφέ. Τώρα μπορείτε να πάρετε το ευελιξία να επιλέγουν είτε το νερό της βρύσης ή καφέ.) και μείωση της εξάρτησης (σύντροφός σας έχει μια δουλειά, δεν έχετε δουλειά, θα εξαρτηθεί οικονομικά από το σύντροφό σας, έτσι ώστε να ελέγχονται. μπορείτε να βρείτε μια δουλειά, που έχουν εφαρμόσει Αντιστροφή της Ελέγχου. Καλό σύστημα του υπολογιστή ενθαρρύνει την εξάρτηση.)

Όταν χρησιμοποιείτε έναν επιτραπέζιο υπολογιστή, έχετε υποδούλωσαν (ή να πω, ελεγχόμενη). Θα πρέπει να καθίσει πριν από μια οθόνη και να το δει κανείς. Χρησιμοποιώντας το πληκτρολόγιο για να πληκτρολογήσετε και χρησιμοποιώντας το ποντίκι για να περιηγηθείτε. Και ένα κακογραμμένο λογισμικό μπορεί να σας σκλάβος ακόμη περισσότερο. Εάν αντικαταστήσετε την επιφάνεια εργασίας σας με ένα laptop, τότε κάπως αντεστραμμένη έλεγχο. Μπορείτε εύκολα να το πάρετε και να μετακινούνται. Έτσι τώρα μπορείτε να ελέγξετε όπου και αν βρίσκεστε με τον υπολογιστή σας, αντί για τον υπολογιστή σας να ελέγχει.

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

Με τις παραπάνω ιδέες στο μυαλό. Έχουμε ακόμα λείπει ένα βασικό μέρος της ΔΟΕ. Στο σενάριο της ΔΟΕ, το λογισμικό / αντικείμενο καταναλωτών είναι ένα εξελιγμένο πλαίσιο. Αυτό σημαίνει ότι ο κώδικας που δημιουργήθηκε δεν καλείται από τον εαυτό σας. Τώρα ας εξηγήσουμε γιατί με αυτόν τον τρόπο λειτουργεί καλύτερα για μια εφαρμογή web.

Ας υποθέσουμε ότι ο κωδικός σας είναι μια ομάδα εργαζομένων. Θα πρέπει να οικοδομήσουμε ένα αυτοκίνητο. Αυτοί οι εργαζόμενοι χρειάζονται ένα μέρος και εργαλεία (ένα πλαίσιο λογισμικού) για την κατασκευή του αυτοκινήτου. Ένα παραδοσιακό πλαίσιο του λογισμικού θα είναι σαν ένα γκαράζ με πολλά εργαλεία. Έτσι, οι εργαζόμενοι πρέπει να κάνει ένα σχέδιο εαυτό τους και να χρησιμοποιούν τα εργαλεία για την κατασκευή του αυτοκινήτου. Η οικοδόμηση ενός αυτοκινήτου δεν είναι μια εύκολη επιχείρηση, θα είναι πολύ δύσκολο για τους εργάτες να σχεδιάζουν και να συνεργάζονται σωστά. Ένα σύγχρονο πλαίσιο λογισμικό θα είναι σαν ένα σύγχρονο εργοστάσιο αυτοκινήτων με όλες τις ανέσεις και τα διευθυντικά στελέχη στη θέση του. Οι εργαζόμενοι δεν έχουν να κάνουν οποιοδήποτε σχέδιο, οι διαχειριστές (μέρος του πλαισίου, είναι οι πιο έξυπνους ανθρώπους κάνοντας το πιο εξελιγμένο σχέδιο) θα βοηθήσει στο συντονισμό, έτσι ώστε οι εργαζόμενοι να γνωρίζουν πότε να κάνουν τη δουλειά τους (πλαισίου απαιτεί κωδικό σας). Οι εργαζόμενοι πρέπει απλώς να είναι αρκετά ευέλικτη ώστε να χρησιμοποιείτε εργαλεία οι διαχειριστές δίνουν σε αυτά (με τη χρήση εξάρτηση Injection).

Παρά το γεγονός ότι οι εργαζόμενοι δίνουν τον έλεγχο της διαχείρισης του έργου σε κορυφαίο επίπεδο με τους διαχειριστές (το πλαίσιο). Αλλά είναι καλό να έχουμε κάποιες επαγγελματίες βοηθήσει. Αυτή είναι η έννοια της ΔΟΕ πραγματικά προέρχονται.

Σύγχρονες εφαρμογές Web με μια αρχιτεκτονική MVC εξαρτάται από το πλαίσιο για να κάνει το URL δρομολόγησης και να Ελεγκτές στη θέση του για το πλαίσιο για να καλέσετε.

Εξάρτηση Έγχυση και Αντιστροφή Ελέγχου σχετίζονται. Εξάρτηση Injection βρίσκεται στο μικρο επίπεδο και Αντιστροφή Ελέγχου βρίσκεται στο μακρο επίπεδο. Θα πρέπει να τρώτε κάθε μπουκιά (εφαρμογή DI), προκειμένου να τελειώσει το γεύμα (εφαρμογή ΔΟΕ).

Απαντήθηκε 04/03/2013 στις 20:33
πηγή χρήστη

ψήφοι
72

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

Πλεονεκτήματα:

  • Ο κωδικός σας παίρνει αποσυνδεδεμένη, ώστε να μπορείτε εύκολα να ανταλλάξετε εφαρμογές της διεπαφής με εναλλακτικές εφαρμογές
  • Είναι ένα ισχυρό κίνητρο για την κωδικοποίηση κατά διασυνδέσεις αντί για εφαρμογές
  • Είναι πολύ εύκολο να γράψει εξετάσεις μονάδα για τον κωδικό σας, διότι αυτό εξαρτάται από τίποτε άλλο από τα αντικείμενα που δέχεται σε κατασκευαστή / setters και μπορείτε εύκολα να προετοιμάσει με τα σωστά αντικείμενα σε απομόνωση.

Μειονεκτήματα:

  • ΔΟΕ όχι μόνο αναστρέφει τη ροή του ελέγχου στο πρόγραμμά σας, να είναι σύννεφα επίσης σημαντικά. Αυτό σημαίνει ότι δεν μπορείτε πλέον απλά διαβάστε κώδικα και άλμα σας από το ένα μέρος στο άλλο, επειδή οι συνδέσεις που θα ήταν κανονικά στον κώδικά σας δεν είναι στον κώδικα πια. Αντ 'αυτού, είναι στα αρχεία ρυθμίσεων XML ή σχολιασμούς και στον κώδικα του δοχείου σας ΔΟΕ που ερμηνεύει αυτά τα μεταδεδομένα.
  • προκύπτει Υπάρχει μια νέα κατηγορία σφάλματα όπου μπορείτε να πάρετε XML config σας ή τα σχόλια σας λάθος και μπορείτε να περάσετε πολύ χρόνο να ανακαλύψει γιατί δοχείο σας ΔΟΕ εγχέει μια μηδενική αναφορά σε ένα από τα αντικείμενα σας κάτω από ορισμένες προϋποθέσεις.

Προσωπικά βλέπω τα δυνατά σημεία της ΔΟΕ και μου αρέσουν πολύ, αλλά έχω την τάση να αποφευχθεί η ΔΟΕ, όποτε είναι δυνατόν, διότι μετατρέπει το λογισμικό σας σε μια συλλογή από κλάσεις που αποτελούν πλέον ένα «πραγματικό» του προγράμματος, αλλά απλά κάτι που πρέπει να τεθούν από κοινού από διαμόρφωσης XML ή σχόλιο μεταδεδομένα και θα πέσει (και πέφτει) πέρα ​​χωρίς αυτό.

Απαντήθηκε 12/02/2010 στις 15:31
πηγή χρήστη

ψήφοι
55
  1. Άρθρο της Wikipedia . Για μένα, αντιστροφή του ελέγχου μετατρέπεται διαδοχικά γραπτό κώδικα σας και μετατρέποντάς το σε μια δομή αντιπροσωπείας. Αντί του προγράμματός σας τον έλεγχο ρητά τα πάντα, το πρόγραμμά σας δημιουργεί μια τάξη ή μια βιβλιοθήκη με ορισμένες λειτουργίες που θα καλείται όταν συμβαίνουν ορισμένα πράγματα.

  2. Λύνει τον κωδικό επικάλυψη. Για παράδειγμα, τον παλιό καιρό που θα γράψετε με το χέρι τη δική σας εκδήλωση βρόχο, δημοσκοπήσεων τις βιβλιοθήκες συστήματος για τις νέες εκδηλώσεις. Σήμερα, τα περισσότερα σύγχρονα APIs μπορείτε απλά να πείτε τις βιβλιοθήκες του συστήματος ποιες εκδηλώσεις που σας ενδιαφέρει, και θα σας ενημερώσουμε όταν συμβαίνουν.

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

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

Απαντήθηκε 06/08/2008 στις 05:33
πηγή χρήστη

ψήφοι
38

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

Όπως και σε αυτό το παράδειγμα με TextEditor: αν έχετε μόνο ένα ορθογράφος ίσως δεν είναι πραγματικά απαραίτητο να χρησιμοποιήσετε ΔΟΕ; Εκτός αν πρέπει να γράψω εξετάσεις μονάδα ή κάτι τέτοιο ...

Τέλος πάντων: είναι λογικό. Πρότυπο σχεδιασμού είναι καλές πρακτικές , αλλά δεν Βίβλο να κήρυττε. Μην το κολλήσει παντού.

Απαντήθηκε 06/08/2008 στις 23:08
πηγή χρήστη

ψήφοι
34

Ας υποθέσουμε ότι είστε ένα αντικείμενο. Και αν πάτε σε ένα εστιατόριο:

Χωρίς ΔΟΕ : σας ρωτήσω για «μήλο», και σερβίρονται πάντα μήλο όταν σας ρωτήσω περισσότερα.

Με ΔΟΕ : Μπορείτε να ζητήσετε «φρούτα». Μπορείτε να πάρετε διάφορα φρούτα κάθε φορά που έχετε υπηρετήσει. για παράδειγμα, μήλο, πορτοκάλι, ή καρπούζι.

Έτσι, προφανώς, ΔΟΕ προτιμάται όταν θέλετε τις ποικιλίες.

Απαντήθηκε 25/09/2013 στις 15:00
πηγή χρήστη

ψήφοι
34

ΔΟΕ / DI για να με πιέζει τις εξαρτήσεις στα καλώντας αντικείμενα. Σούπερ απλή.

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

Απαντήθηκε 19/09/2008 στις 03:54
πηγή χρήστη

ψήφοι
23
  1. Αντιστροφή του ελέγχου είναι ένα πρότυπο που χρησιμοποιείται για την αποσύνδεση εξαρτημάτων και στρώματα στο σύστημα. Το μοτίβο υλοποιείται μέσω της ενέσιμης εξαρτήσεις σε ένα συστατικό στοιχείο όταν κατασκευάζεται. Αυτές οι εξαρτήσεις συνήθως παρέχονται ως διεπαφές για την περαιτέρω αποσύνδεση και την υποστήριξη ελεγξιμότητα. IOC / DI περιέκτες όπως Castle Windsor, Unity είναι εργαλεία (βιβλιοθήκες) που μπορούν να χρησιμοποιηθούν για την παροχή IOC. Τα εργαλεία αυτά παρέχουν εκτεταμένη χαρακτηριστικά πάνω και πέρα ​​από την απλή διαχείριση της εξάρτησης, συμπεριλαμβανομένης της διάρκειας ζωής, AOP / Δημιουργικότητα, πολιτική, κ.λπ.

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

  3. ένα. Κρίσιμη όταν κάνει δοκιμή με γνώμονα την ανάπτυξη. Χωρίς ΔΟΕ μπορεί να είναι δύσκολο να ελεγχθεί, επειδή τα συστατικά υπό δοκιμή είναι πολύ συνδέεται με το υπόλοιπο σύστημα.
    σι. Κρίσιμη κατά την ανάπτυξη αρθρωτά συστήματα. Ένα αρθρωτό σύστημα είναι ένα σύστημα του οποίου τα συστατικά μπορούν να αντικατασταθούν χωρίς να απαιτείται recompilation.
    ντο. Κρίσιμη αν υπάρχουν πολλά διατομεακά προβλήματα που πρέπει να αντιμετωπιστούν, partilarly σε μια εφαρμογή επιχείρησης.

Απαντήθηκε 19/09/2008 στις 03:27
πηγή χρήστη

ψήφοι
17

Θα γράψω απλά την κατανόησή μου για αυτό δύο όρους:

For quick understanding just read examples*

Εξάρτηση Injection (DI):
Εξάρτηση ένεση γενικά σημαίνει πέρασμα ενός αντικειμένου επί του οποίου η μέθοδος εξαρτάται, ως παράμετρος σε μια μέθοδο, αντί να χρειάζεται η μέθοδος δημιουργήσει το εξαρτώμενο αντικείμενο .
Τι σημαίνει στην πράξη είναι ότι η μέθοδος δεν εξαρτάται άμεσα από μια συγκεκριμένη εφαρμογή? κάθε εφαρμογή που πληροί τις απαιτήσεις μπορεί να περάσει ως παράμετρος.

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

Quick Example:EMPLOYEE OBJECT WHEN CREATED,
              IT WILL AUTOMATICALLY CREATE ADDRESS OBJECT
   (if address is defines as dependency by Employee object)

Αντιστροφή Ελέγχου (ΔΟΕ) Συσκευασία:
Αυτό είναι κοινό χαρακτηριστικό των πλαισίων, ΔΟΕ διαχειρίζεται αντικείμενα java
- από στιγμιότυπο με την καταστροφή μέσω BeanFactory του.
Τα -Java συστατικά που instantiated από το δοχείο IOC ονομάζεται φασόλια, και ο περιέκτης IOC κατάφερε πεδίο εφαρμογής ενός φασολιού, γεγονότα του κύκλου ζωής, και οποιαδήποτε χαρακτηριστικά AOP για το οποίο έχει διαμορφωθεί και κωδικοποιείται.

QUICK EXAMPLE:Inversion of Control is about getting freedom, more flexibility, and less dependency. When you are using a desktop computer, you are slaved (or say, controlled). You have to sit before a screen and look at it. Using keyboard to type and using mouse to navigate. And a bad written software can slave you even more. If you replaced your desktop with a laptop, then you somewhat inverted control. You can easily take it and move around. So now you can control where you are with your computer, instead of computer controlling it.

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

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

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

Λεπτομερής εξήγηση

Απαντήθηκε 10/11/2014 στις 08:43
πηγή χρήστη

ψήφοι
15

Για παράδειγμα, το έργο # 1 είναι η δημιουργία αντικειμένου. Χωρίς έννοια της ΔΟΕ, εργασία # 1 υποτίθεται ότι πρέπει να γίνει από Programmer.But Με έννοιας της ΔΟΕ, εργασία # 1 θα γίνει με εμπορευματοκιβώτια.

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

Βρήκα ένα καλό παράδειγμα εδώ .

Απαντήθηκε 27/01/2010 στις 13:15
πηγή χρήστη

ψήφοι
14

Απάντηση μόνο το πρώτο μέρος. Τι είναι αυτό?

Αντιστροφή του ελέγχου (IOC) μέσα για τη δημιουργία περιπτώσεις εξαρτήσεων πρώτο και τελευταίο παράδειγμα μιας κατηγορίας (προαιρετικά έγχυση τους μέσω του κατασκευαστή), αντί να δημιουργήσει μια εμφάνιση της κλάσης πρώτα και στη συνέχεια το παράδειγμα τάξη δημιουργώντας παρουσίες των εξαρτήσεων. Έτσι, αντιστροφή του ελέγχου αντιστρέφει τη ροή του ελέγχου του προγράμματος. Αντί του καλούμενου ελέγχει την ροή ελέγχου (κατά τη δημιουργία εξαρτήσεων), ο καλών ελέγχει τη ροή του ελέγχου του προγράμματος .

Απαντήθηκε 11/01/2016 στις 00:49
πηγή χρήστη

ψήφοι
14

Φαίνεται ότι το πιο σύγχυση πράγμα για «ΔΟΕ» το ακρωνύμιο και το όνομα για το οποίο έχει είναι ότι είναι πάρα πολύ λαμπερό από ένα όνομα - σχεδόν ένα όνομα θόρυβο.

Χρειαζόμαστε πραγματικά ένα όνομα με το οποίο για να περιγράψει τη διαφορά μεταξύ των διαδικαστικών και περίπτωση με γνώμονα τον προγραμματισμό; Εντάξει, αν χρειαστεί, αλλά εμείς πρέπει να πάρει ένα νέο «μεγαλύτερο από τη ζωή» όνομα που μπερδεύει περισσότερο από όσα επιλύει;

Απαντήθηκε 19/01/2011 στις 04:50
πηγή χρήστη

ψήφοι
13

Ας να πω ότι κάνουμε κάποια συνάντηση σε κάποιο ξενοδοχείο.

Πολλοί άνθρωποι, πολλοί καράφες νερό, πολλά πλαστικά ποτήρια.

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

Μετά από ώρα ή κάτι έχουμε ένα πάτωμα που καλύπτεται από πλαστικά ποτήρια και νερό.

Ας ιμβερτοποιημένο ελέγχου.

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

και αυτή όλο το χρόνο και προσφέρει στους επισκέπτες πόσιμο.

Όταν κάποιος θέλει να πιει, που παίρνουν από γυαλί σερβιτόρος, το ποτό και να επιστρέψει πίσω στο σερβιτόρο.

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

Και αυτό είναι ακριβώς αυτό που η Άνοιξη (ένα άλλο δοχείο ΔΟΕ, για παράδειγμα: Guice) κάνει. Αντί να εκμισθωθεί σε εφαρμογή τη δημιουργία ό, τι χρειάζεστε με τη χρήση νέων λέξεων-κλειδιών (λαμβάνοντας πλαστικό κύπελλο), δοχείο Άνοιξη ΔΟΕ όλο το χρόνο προσφοράς για την εφαρμογή το ίδιο παράδειγμα (Singleton) των απαιτούμενων αντικειμένου (ποτήρι νερό).

Σκεφτείτε τον εαυτό σας ως οργανωτής αυτής της συνάντησης. Χρειάζεται το δρόμο για το μήνυμα από τη χορήγηση του ξενοδοχείου που

συνάντηση των μελών θα πρέπει ποτήρι νερό, αλλά όχι κομμάτι κέικ.

Παράδειγμα:-

public class MeetingMember {

    private GlassOfWater glassOfWater;

    ...

    public void setGlassOfWater(GlassOfWater glassOfWater){
        this.glassOfWater = glassOfWater;
    }
    //your glassOfWater object initialized and ready to use...
    //spring IoC  called setGlassOfWater method itself in order to
    //offer to meetingMember glassOfWater instance

}

Χρήσιμα links: -

Απαντήθηκε 26/09/2012 στις 18:54
πηγή χρήστη

ψήφοι
13

Συμφωνώ με NilObject , αλλά θα ήθελα να προσθέσω σε αυτό:

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

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

Απαντήθηκε 06/08/2008 στις 06:20
πηγή χρήστη

ψήφοι
10

ΔΟΕ είναι περίπου αναστρέφοντας τη σχέση μεταξύ κωδικό σας και τον κωδικό τρίτου μέρους (βιβλιοθήκη / πλαίσιο):

  • Στην κανονική s / w ανάπτυξης, μπορείτε να γράψετε το κύριο () μέθοδο και να καλέσει μεθόδους «βιβλιοθήκη». Είστε στον έλεγχο :)
  • Σε ΔΟΕ το «πλαίσιο» ελέγχει main () και καλεί τις μεθόδους σας. Το πλαίσιο έχει τον έλεγχο :(

DI (Εξάρτηση Injection) είναι για το πώς ρέει ο έλεγχος στην αίτηση. Παραδοσιακά desktop εφαρμογή είχε τον έλεγχο της ροής από την εφαρμογή σας (μέθοδος main ()) σε άλλη μέθοδο βιβλιοθήκη κλήσεις, αλλά με τον έλεγχο της ροής DI αναστρέφεται ότι είναι πλαίσιο φροντίζει για την έναρξη της εφαρμογής σας, την προετοιμασία του και επικαλούμενος τις μεθόδους σας, όποτε ζητηθεί.

Στο τέλος κερδίζει πάντα :)

Απαντήθηκε 19/09/2014 στις 19:25
πηγή χρήστη

ψήφοι
7

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

Κοιτάζοντας Αντιστροφή του ελέγχου ως πρότυπο σχεδιασμού, θα πρέπει να δούμε τι έχουμε αντιστροφή. Η εξάρτηση της ένεσης αντιστρέφει τον έλεγχο της κατασκευής ενός γραφήματος αντικειμένων. Αν είπε σε απλή γλώσσα όρος, αντιστροφή του ελέγχου συνεπάγεται αλλαγή στη ροή του ελέγχου στο πρόγραμμα. Π.χ. Στην παραδοσιακή εφαρμογή αυτόνομο, έχουμε κύρια μέθοδο, απ 'όπου ο έλεγχος γίνεται πέρασε σε άλλες βιβλιοθήκες τρίτων (σε περίπτωση που έχουμε χρησιμοποιήσει τη λειτουργία της βιβλιοθήκης τρίτου), αλλά με αντιστροφή του ελέγχου ελέγχου παίρνει μεταφέρθηκε από τον κωδικό βιβλιοθήκη τρίτο να μας κώδικα , όπως κάνουμε την υπηρεσία της βιβλιοθήκης τρίτους. Αλλά υπάρχουν και άλλες πτυχές που πρέπει να αναστραφεί μέσα σε ένα πρόγραμμα - π.χ. επίκληση των μεθόδων και νήματα για να εκτελέσει τον κώδικα.

Για όσους ενδιαφέρονται σε μεγαλύτερο βάθος σε Αντιστροφή του ελέγχου ένα έγγραφο έχει δημοσιευθεί σκιαγραφεί μια πιο ολοκληρωμένη εικόνα της αντιστροφής του ελέγχου ως πρότυπο σχεδιασμού (OfficeFloor: χρησιμοποιώντας πρότυπα γραφείο για τη βελτίωση του σχεδιασμού του λογισμικού http://doi.acm.org/10.1145/ 2739011.2739013 με ένα δωρεάν αντίτυπο διατίθεται για download από http://www.officefloor.net/mission.html )

Αυτό που εντοπίστηκαν είναι η ακόλουθη σχέση:

Αντιστροφή του ελέγχου (για μεθόδους) = Εξάρτησης (κατάσταση) Injection + Συνέχιση Ένεση + Νήμα Injection

Απαντήθηκε 29/10/2015 στις 04:27
πηγή χρήστη

ψήφοι
7

Προγραμματισμός ομιλίας

ΔΟΕ στην εύκολη όρους: Είναι η χρήση της διασύνδεσης ως ένας τρόπος συγκεκριμένων κάτι (ένα τέτοιο πεδίο ή μια παράμετρο) ως χαρακτήρα μπαλαντέρ που μπορεί να χρησιμοποιηθεί από ορισμένους κλάδους. Επιτρέπει τη δυνατότητα επαναχρησιμοποίησης του κώδικα.

Για παράδειγμα, ας υποθέσουμε ότι έχουμε δύο κατηγορίες: Σκύλος και γάτα . Και οι δύο συμμερίζεται τις ίδιες ιδιότητες / δηλώνει: η ηλικία, το μέγεθος, το βάρος. Έτσι, αντί να δημιουργήσει μια κατηγορία υπηρεσία που ονομάζεται DogService και catService , μπορώ να δημιουργήσει ούτε μία που ονομάζεται AnimalService που επιτρέπει τη χρήση σκύλου και της γάτας μόνο αν χρησιμοποιήσετε το περιβάλλον IAnimal .

Ωστόσο, ρεαλιστικά μιλώντας, έχει μερικές προς τα πίσω.

α) Οι περισσότεροι από τους προγραμματιστές δεν ξέρουν πώς να το χρησιμοποιήσετε . Για παράδειγμα, μπορώ να δημιουργήσει μια κατηγορία που ονομάζεται πελατών και μπορώ να δημιουργήσει αυτόματα (χρησιμοποιώντας τα εργαλεία του IDE) μια διασύνδεση που ονομάζεται ICustomer . Έτσι, δεν είναι σπάνιο να βρεθεί ένα φάκελο γεμάτο με κλάσεων και διεπαφών, δεν έχει σημασία αν οι διασυνδέσεις θα επαναχρησιμοποιηθούν ή όχι. Αυτό λέγεται πρησμένο. Μερικοί άνθρωποι μπορεί να υποστηρίζουν ότι «μπορεί να είναι στο μέλλον θα μπορούσαμε να το χρησιμοποιήσει». : - |

β) Έχει κάποια limitings. Για παράδειγμα, ας μιλήσουμε για την περίπτωση του σκύλου και της γάτας και θέλω να προσθέσω μια νέα υπηρεσία (λειτουργία) μόνο για σκύλους. Ας πούμε ότι θέλω να υπολογίσει τον αριθμό των ημερών που θα πρέπει να εκπαιδεύσει ένα σκυλί ( trainDays()), για τη γάτα είναι άχρηστο, οι γάτες δεν μπορούν να εκπαιδευτεί (Ι αστειεύομαι).

β.1) Αν μπορώ να προσθέσω trainDays()στην Υπηρεσία AnimalService τότε λειτουργεί επίσης με τις γάτες και δεν είναι έγκυρο καθόλου.

β.2) μπορώ να προσθέσω μια κατάσταση στην trainDays()οποία αξιολογεί ποια κατηγορία χρησιμοποιείται. Αλλά θα σπάσει τελείως η ΔΟΕ.

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

Απαντήθηκε 19/04/2015 στις 12:07
πηγή χρήστη

ψήφοι
7

Μια πολύ απλή γραπτή εξήγηση μπορεί να βρεθεί εδώ

http://binstock.blogspot.in/2008/01/excellent-explanation-of-dependency.html

λέει

«Κάθε μη τετριμμένη εφαρμογή αποτελείται από δύο ή περισσότερες κατηγορίες που συνεργάζονται μεταξύ τους για να εκτελέσει κάποια επιχειρηματική λογική. Παραδοσιακά, κάθε αντικείμενο έχει την ευθύνη για τη λήψη δική αναφορές του στα αντικείμενα που συνεργάζεται με (εξαρτήσεις του). Κατά την εφαρμογή DI, το τα αντικείμενα δίνονται εξαρτήσεις τους κατά τη στιγμή της δημιουργίας από κάποια εξωτερική οντότητα που συντονίζει κάθε αντικείμενο στο σύστημα. με άλλα λόγια, οι εξαρτήσεις εγχέεται αντικείμενα.»

Απαντήθηκε 22/02/2013 στις 15:13
πηγή χρήστη

ψήφοι
6

Μου αρέσει αυτή η εξήγηση: http://joelabrahamsson.com/inversion-of-control-an-introduction-with-examples-in-net/

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

εισάγετε περιγραφή της εικόνας εδώ

Ο καταναλωτής, Χ, χρειάζεται την καταναλώνονται τάξη, Y, για να πετύχω κάτι. Αυτό είναι όλα καλά και φυσικά, αλλά δεν X πραγματικά χρειάζεται να γνωρίζετε ότι χρησιμοποιεί Υ;

Δεν είναι αρκετό ότι το Χ γνωρίζει ότι χρησιμοποιεί κάτι που έχει τη συμπεριφορά, τις μεθόδους, τις ιδιότητες κλπ, Υ χωρίς να γνωρίζει ποιος εφαρμόζει πραγματικά τη συμπεριφορά;

Με την εξόρυξη μια αφηρημένη ορισμό της συμπεριφοράς που χρησιμοποιείται από το Χ στο Υ, απεικονίζονται όπως παρακάτω, και να αφήσει ο καταναλωτής Χ χρησιμοποιήσετε μια παρουσία που αντί Υ μπορεί να συνεχίσει να κάνει αυτό που κάνει, χωρίς να χρειάζεται να γνωρίζουν τις λεπτομέρειες για το Γ

εισάγετε περιγραφή της εικόνας εδώ

Στο παραπάνω σχήμα Υ υλοποιεί Ι και Χ χρησιμοποιεί ένα παράδειγμα του Ι Ενώ είναι πολύ πιθανό ότι το Χ εξακολουθεί να χρησιμοποιεί Υ αυτό που είναι ενδιαφέρον είναι ότι το Χ δεν το γνωρίζουν αυτό. Απλά ξέρει ότι χρησιμοποιεί κάτι που υλοποιεί I.

Διαβάστε το άρθρο για περισσότερες πληροφορίες και την περιγραφή της οφέλη, όπως:

  • Το Χ δεν εξαρτάται από το Υ πια
  • Πιο ευέλικτη, η εφαρμογή μπορεί να αποφασιστεί σε χρόνο εκτέλεσης
  • Απομόνωση της μονάδας κώδικα, ευκολότερη δοκιμή

...

Απαντήθηκε 16/02/2017 στις 02:03
πηγή χρήστη

ψήφοι
4

Αντιστροφή του ελέγχου είναι σχετικά με τη μεταφορά ελέγχου από τη βιβλιοθήκη στον πελάτη. Είναι πιο λογικό, όταν μιλάμε για έναν πελάτη που εγχέει (περνά) μια τιμή λειτουργίας (έκφραση λάμδα) σε μια υψηλότερη συνάρτηση τάξης (λειτουργία βιβλιοθήκης) που ελέγχει (αλλαγές) τη συμπεριφορά της λειτουργίας της βιβλιοθήκης. Ένας πελάτης ή πλαίσιο που εγχέει εξαρτήσεις βιβλιοθήκης (που μεταφέρουν συμπεριφορά) σε βιβλιοθήκες μπορεί επίσης να θεωρηθεί ΔΟΕ

Απαντήθηκε 24/12/2017 στις 18:34
πηγή χρήστη

ψήφοι
4

Βρήκα ένα πολύ σαφές παράδειγμα εδώ που εξηγεί πώς ο «έλεγχος αντιστρέφεται».

Classic κωδικός (χωρίς Εξάρτηση ένεση)

Εδώ είναι το πώς ένας κώδικας που δεν χρησιμοποιούν DI θα λειτουργήσει κατά προσέγγιση:

  • Εφαρμογή χρειάζεται Foo (π.χ. έναν ελεγκτή), έτσι:
  • Η εφαρμογή δημιουργεί Foo
  • Εφαρμογή καλεί Foo
    • Foo πρέπει Bar (π.χ. μια υπηρεσία), έτσι ώστε:
    • Foo δημιουργεί Bar
    • Foo καλεί Bar
      • Bar χρειάζεται Bim (μια υπηρεσία, μια αποθήκη, ...), έτσι ώστε:
      • Bar δημιουργεί Bim
      • Bar κάνει κάτι

Χρησιμοποιώντας ένεση εξάρτηση

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

  • Πρέπει εφαρμογή Foo, η οποία χρειάζεται Bar, το οποίο πρέπει Bim, έτσι ώστε:
  • Η εφαρμογή δημιουργεί Bim
  • Η εφαρμογή δημιουργεί Bar και δίνει Bim
  • Η εφαρμογή δημιουργεί Foo και δίνει Bar
  • Εφαρμογή καλεί Foo
    • Foo καλεί Bar
      • Bar κάνει κάτι

Ο έλεγχος των εξαρτήσεων αντιστρέφεται από τη μία να καλούνται με αυτή την κλήση.

Τι προβλήματα έχει να λύσει;

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

Παράδειγμα: Ας υποθέσουμε ότι η εφαρμογή σας αποθηκεύει το αρχείο φορτώθηκε χρήστη στο Google Drive, με DI κωδικό ελέγχου σας μπορεί να μοιάζει κάπως έτσι:

class SomeController
{
    private $storage;

    function __construct(StorageServiceInterface $storage)
    {
        $this->storage = $storage;
    }

    public function myFunction () 
    {
        return $this->storage->getFile($fileName);
    }
}

class GoogleDriveService implements StorageServiceInterface
{
    public function authenticate($user) {}
    public function putFile($file) {}
    public function getFile($file) {}
}

Όταν οι απαιτήσεις σας αλλάζουν λένε, αντί να GoogleDrive θα σας ζητηθεί να χρησιμοποιήσετε το Dropbox. Το μόνο που χρειάζεται για να γράψει μια εφαρμογή dropbox για την StorageServiceInterface. Δεν χρειάζεται να κάνετε αλλαγές στον ελεγκτή όσο εφαρμογή Dropbox εμμένει στο StorageServiceInterface.

Ενώ δοκιμές μπορείτε να δημιουργήσετε τη μακέτα για την StorageServiceInterface με την εικονική εκτέλεση, όπου όλες οι μέθοδοι επιστρέφουν null (ή οποιαδήποτε προκαθορισμένη τιμή σύμφωνα με την απαίτησή δοκιμές σας).

Αντ 'αυτού, αν είχατε την τάξη ελεγκτή για την κατασκευή του αντικειμένου αποθήκευσης με τη newλέξη-κλειδί, όπως αυτό:

class SomeController
{
    private $storage;

    function __construct()
    {
        $this->storage = new GoogleDriveService();
    }

    public function myFunction () 
    {
        return $this->storage->getFile($fileName);
    }
}

Όταν θέλετε να αλλάξετε την εφαρμογή Dropbox θα πρέπει να αντικαταστήσει όλες τις γραμμές όπου newκατασκευάζεται GoogleDriveService αντικείμενο και χρησιμοποιήστε το DropboxService. Εκτός από όταν τον έλεγχο της τάξης SomeController ο κατασκευαστής αναμένει πάντα η τάξη GoogleDriveService και τις πραγματικές μεθόδους αυτής της κατηγορίας ενεργοποιούνται.

Πότε είναι κατάλληλη και πότε όχι; Κατά τη γνώμη μου, μπορείτε να χρησιμοποιήσετε DI όταν νομίζετε ότι υπάρχουν (ή δεν μπορεί να υπάρξει) εναλλακτικές υλοποιήσεις της κατηγορίας.

Απαντήθηκε 04/11/2017 στις 13:27
πηγή χρήστη

ψήφοι
4

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

Αντιστροφή Ελέγχου (ΔΟΕ) έχει χτιστεί σε μια πολύ απλή αρχή που ονομάζεται Χόλιγουντ Αρχή . Και λέει ότι,

Μην μας καλέσετε, θα σας καλέσουμε

Αυτό που σημαίνει είναι ότι δεν πηγαίνουν στο Χόλιγουντ για να εκπληρώσει το όνειρό σας και όχι αν είστε άξιοι τότε Χόλιγουντ θα σας βρει και να κάνει το όνειρό σας γίνεται πραγματικότητα. Λίγο πολύ ανεστραμμένη, ε;

Τώρα, όταν συζητάμε για την αρχή της ΔΟΕ, που χρησιμοποιούμε για να ξεχάσουμε το Χόλιγουντ. Για ΔΟΕ, πρέπει να είναι τρία στοιχεία, το Χόλιγουντ εκεί, και ένα έργο ήθελε να εκπληρώσει το όνειρό σας.

Στον κόσμο του προγραμματισμού μας, Hollywood αποτελούν ένα γενικό πλαίσιο (μπορεί να γραφτεί από εσάς ή κάποιον άλλο), που αντιπροσωπεύουν τον κωδικό χρήστη που έγραψε και το έργο αντιπροσωπεύουν το πράγμα που θέλετε να πετύχετε με τον κωδικό σας. Τώρα δεν χρειάζεται ποτέ να πάει να προκαλέσει την εργασία σας με τον εαυτό σας, όχι ΔΟΕ! Μάλλον έχετε σχεδιάσει τα πάντα σε τέτοιες αυτό το πλαίσιο θα προκαλέσει την εργασία σας για σας. Έτσι έχετε χτίσει ένα επαναχρησιμοποιήσιμο πλαίσιο που μπορεί να κάνει κάποιος ήρωας ή ένας άλλος ένας κακοποιός. Αλλά αυτό πλαίσιο είναι πάντα υπεύθυνος, δεν ξέρει πότε να πάρει κάποιος και ότι κάποιος ξέρει τι θέλει να είναι.

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

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

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

Laravel και EJB είναι παραδείγματα ενός τέτοιου πλαισίου.

Αναφορά:

https://martinfowler.com/bliki/InversionOfControl.html

https://en.wikipedia.org/wiki/Inversion_of_control

Απαντήθηκε 01/10/2017 στις 11:24
πηγή χρήστη

ψήφοι
4

IOC είναι επίσης γνωστή ως ένεση εξάρτηση (DI). Είναι μια διαδικασία κατά την οποία τα αντικείμενα καθορίζουν τις εξαρτήσεις τους, δηλαδή, τα άλλα αντικείμενα που λειτουργούν με, μόνο μέσω επιχειρήματα κατασκευαστή, επιχειρήματα σε μία μέθοδο εργοστάσιο, ή τις ιδιότητες που έχουν οριστεί στο παράδειγμα αντικειμένου αφού κατασκευαστεί ή να επιστραφεί από μία μέθοδο εργοστάσιο . Το δοχείο στη συνέχεια διοχετεύει αυτές τις εξαρτήσεις, όταν δημιουργεί το φασόλι. Αυτή η διαδικασία είναι ουσιαστικά το αντίστροφο, εξ ου και η ονομασία Αντιστροφή Ελέγχου (IOC), της ίδιας της φασολιάς που ελέγχει την συγκεκριμενοποίηση ή τοποθεσία των εξαρτήσεων της χρησιμοποιώντας άμεση κατασκευή των κατηγοριών, ή ένα μηχανισμό, όπως το πρότυπο Υπηρεσία Locator

Άνοιξη-πλαίσιο-referance.pfd σελίδα 27 (αν μετρήσουμε όλες τις σελίδες του εγγράφου pdf, είναι στην σελίδα 51)

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/pdf/spring-framework-reference.pdf

Απαντήθηκε 24/01/2013 στις 15:52
πηγή χρήστη

ψήφοι
3

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

Όσον αφορά τον προγραμματισμό πέρασε μια λειτουργία επανάκλησης getProductList()στη λειτουργία που εκτελεί doShopping()?

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

Απαντήθηκε 15/12/2017 στις 18:35
πηγή χρήστη

ψήφοι
3

Για την κατανόηση της έννοιας, Αντιστροφή Ελέγχου (ΔΟΕ) ή Αντιστροφή Εξάρτηση Αρχή (DIP) περιλαμβάνει δύο δραστηριότητες: αφαίρεση, και αντιστροφή. Εξάρτηση Injection (DI) είναι μόνο ένα από τα λίγα από τις μεθόδους αντιστροφής.

Για να διαβάσετε περισσότερα γι 'αυτό μπορείτε να διαβάσετε το blog μου εδώ

  1. Τι είναι αυτό?

Πρόκειται για μια πρακτική, όπου θα αφήσουμε την πραγματική συμπεριφορά προέρχονται από χώρες εκτός των συνόρων (Class στην Αντικειμενοστρεφής Προγραμματισμός). Το όριο οντότητα γνωρίζει μόνο την αφαίρεση (π.χ. διεπαφή, αφηρημένη κατηγορία, εκπρόσωπος στο Object Oriented Programming) από αυτό.

  1. Τι προβλήματα έχει να λύσει;

Στην διάρκεια του προγραμματισμού, της ΔΟΕ να προσπαθήσουμε να λύσουμε μονολιθική κώδικα καθιστώντας σπονδυλωτή, αποσύνδεση διάφορα τμήματά του, και να το καταστήσει μονάδα-ελέγξιμες.

  1. Πότε είναι κατάλληλη και πότε όχι;

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

Απαντήθηκε 03/06/2016 στις 01:46
πηγή χρήστη

ψήφοι
3

Δημιουργία ενός αντικειμένου εντός κλάση ονομάζεται σφιχτό ζεύξης, Spring αφαιρεί αυτήν την εξάρτηση ακολουθώντας ένα μοτίβο σχεδιασμού (DI / IOC). Σε ποια αντικείμενο της κλάσης σε πέρασε σε κατασκευαστή και όχι δημιουργώντας στην τάξη. Πιο πάνω δίνουμε εξαιρετικά μεταβλητή αναφοράς της κατηγορίας σε κατασκευαστή να καθορίσει πιο γενική δομή.

Απαντήθηκε 13/05/2015 στις 08:52
πηγή χρήστη

ψήφοι
3
  1. Έτσι, τον αριθμό 1 πιο πάνω . Τι είναι η αντιστροφή του ελέγχου;

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

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

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

public class MessagePublisher<RECORD,MESSAGE>
{
    public MessagePublisher(IMapper<RECORD,MESSAGE> mapper,IRemoteEndpoint endPointToSendTo)
    {
      //setup
    }
}

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

Ω ναι, υπάρχουν δοκιμαστικότητα ανησυχίες, αλλά είναι δευτερεύουσες στα οφέλη της ΔΟΕ / DI.

Είμαι σίγουρα αγαπάει ΔΟΕ / DI.

3. Γίνεται πιο κατάλληλη η στιγμή που θα έχετε μια μεσαίου μεγέθους έργο του κάπως πιο περίπλοκο. Θα έλεγα ότι γίνεται κατάλληλη η στιγμή που θα αρχίσετε να αισθάνεστε πόνο.

Απαντήθηκε 19/09/2008 στις 05:59
πηγή χρήστη

ψήφοι
2

Χρησιμοποιώντας ΔΟΕ δεν είναι new'ing τα αντικείμενα σας. δοχείο ΔΟΕ σας θα το κάνουμε αυτό και να διαχειρίζονται τη ζωή τους.

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

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

Απαντήθηκε 16/07/2015 στις 16:06
πηγή χρήστη

ψήφοι
1

Η πρώτη έκδοση της Java EE (J2EE κατά το χρόνο) εισήγαγε την έννοια της αντιστροφής του ελέγχου (ΔΟΕ), που σημαίνει ότι το δοχείο θα αναλάβει τον έλεγχο του κώδικα της επιχείρησής σας και να παρέχουν τεχνικές υπηρεσίες (όπως η συναλλαγή ή η διαχείριση της ασφάλειας).

Απαντήθηκε 03/04/2017 στις 22:42
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more