|
|
Δημοσιεύτηκε στις 18/4/2017 2:54:11 μ.μ.
|
|
|

Ας ξεκινήσουμε με ένα απλό κομμάτι κώδικα:
Ας υποθέσουμε λοιπόν ότι αυτό είναι ένα πρόγραμμα ιστού, θέλουμε πρώτα να ελέγξουμε τη συνεδρία, μετά να ελέγξουμε τα δικαιώματα, να ξεκινήσουμε μια συναλλαγή, να γράψουμε ένα αρχείο καταγραφής, μετά να εκτελέσουμε την ίδια τη λειτουργία και, τέλος, να γράψουμε ένα αρχείο καταγραφής. Προφανώς, δεν μπορούμε να γράψουμε όλες τις κλήσεις μεθόδων στις παραπάνω λειτουργίες στο DoSomething(), οπότε ο κώδικας θα γίνει ένα μεγάλο κομμάτι σκατά, οπότε τι πρέπει να κάνουμε;
Υπάρχουν πολλοί τρόποι για να το εφαρμόσετε, όπως η χρήση πλαισίων όπως το ελατήριο, αλλά σε πραγματικά έργα, δεν είναι δυνατό να εισαγάγετε ένα πλαίσιο επιπόλαια και πολλές φορές χρειάζεται να γράψουμε κάποιους μηχανισμούς μόνοι μας.
Εδώ σκέφτομαι το φίλτρο στο MVC, εφόσον βάλετε μια ετικέτα χαρακτηριστικού στον ελεγκτή ή την ενέργεια, μπορείτε να κάνετε κάποια άλλα πράγματα πριν και μετά την εκτέλεση της μεθόδου. Ας προσομοιώσουμε λοιπόν απλώς μια υλοποίηση φίλτρου.
Πρώτα απ 'όλα, η αρχική μέθοδος μετατρέπεται σε έναν κομψό τρόπο ετικετών χαρακτηριστικών:
Με τις ετικέτες χαρακτηριστικών, πρέπει να υπάρχουν που αντιστοιχούν σε ετικέτες χαρακτηριστικών, καθώς και υλοποιήσεις AOP, οι οποίες μπορούν να περιέχονται ανεξάρτητα σε ένα αρχείο ή μια συναρμολόγηση.
Πρώτον, η ετικέτα που επισυνάπτεται στη μέθοδο, υλοποιείται ως κενή:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] δημόσια σφραγισμένη κλάση MyInterceptorMethodAttribute : Χαρακτηριστικό { } Μετά από αυτό, ορίστε την ετικέτα που θα επισυναφθεί στην κλάση:
Εδώ είναι μια κλάση MyAopHandler που ορίζεται, υλοποιείται ως εξής:
Σημειώστε ότι το συγκεκριμένο τμήμα λειτουργίας του παραπάνω κώδικα είναι ισοδύναμο με μια "κλάση μεσολάβησης", η οποία ουσιαστικά αλλάζει το πλαίσιο της εκτέλεσης της μεθόδου. Αντικειμενοστρεφείς δομές προγραμμάτων, όπως οι εκπρόσωποι, μπορούν να χρησιμοποιηθούν για να εκθέσουν τη συγκεκριμένη υλοποίηση στον έξω κόσμο για δευτερεύουσα ανάπτυξη. |
Προηγούμενος:ES5, ES6, ES2016, ES. Επόμενο: Τι συμβαίνει με την έκδοση του Javascrip{filter}t;Επόμενος:Οδηγός έναρξης του PowerShell - έκδοση v0.3
|