Ένα πρότυπο σχεδίασης είναι ένα εννοιολογικό μοντέλο που σας βοηθά να επιλύσετε προβλήματα σχεδίασης σε διάφορα πλαίσια. Είναι σαν ένα επαναχρησιμοποιήσιμο πρότυπο που μπορείτε να εφαρμόσετε σε έναν κώδικα δόμησης.
Ενώ εργαζόταν σε ένα έργο, είναι ζωτικής σημασίας να θυμάστε ότι δεν θέλετε να ανακαλύψετε ξανά τον τροχό. Εάν μια λύση για ένα πρόβλημα έχει αποδειχθεί αποτελεσματική, η επαναχρησιμοποίησή της θα σας γλιτώσει από τόνους χρόνου και μερικούς πονοκεφάλους. Σε περίπτωση διλημμάτων αρχιτεκτονικής συστήματος, έχουμε αναπτύξει ορισμένα πρότυπα για να διευκολύνουμε μια διαδικασία σχεδιασμού.
Τι είναι ένα πρότυπο σχεδίασης;
Ένα πρότυπο σχεδίασης είναι ένα εννοιολογικό μοντέλο που σας βοηθά να επιλύσετε προβλήματα σχεδίασης σε διάφορα πλαίσια. Είναι σαν ένα επαναχρησιμοποιήσιμο πρότυπο που μπορείτε να εφαρμόσετε σε μια δομική κωδικός. Το θέμα είναι ότι τα πρότυπα σχεδίασης είναι καλά τεκμηριωμένα, αποδεδειγμένα και ευρέως γνωστά. Με άλλα λόγια, χρησιμοποιήστε ένα κατάλληλο πρότυπο σχεδίασης και να είστε σίγουροι ότι οι άλλοι γνώστες των προτύπων σχεδίασης (δηλαδή οι συνάδελφοί σας) θα καταλάβουν τις ιδέες σας ομαλά.
Θέλετε να μάθετε; Έρχεται το Strategy Design Pattern.
Το πρότυπο σχεδιασμού στρατηγικής:
-
ορίζει μια οικογένεια αλγορίθμων,
-
υλοποιεί κάθε έναν από τους αλγορίθμους ως ξεχωριστή οντότητα,
-
επιτρέπει σε κάθε έναν από τους αλγορίθμους να χρησιμοποιείται εναλλακτικά σε ένα δεδομένο πλαίσιο.
Παράδειγμα πραγματικής ζωής; Αυθεντικοποίηση
Σε μια από τις εφαρμογές μας έχουμε εφαρμόσει μερικές στρατηγικές για την πιστοποίηση των αιτήσεων. Επιτρέπουμε τον έλεγχο ταυτότητας με cookies, JWT tokens και κλειδιά API. Μου ακούγεται σαν μια οικογένεια αλγορίθμων.
Ας ρίξουμε μια ματιά σε ένα δείγμα υλοποίησης.
Η οικογένεια αλγορίθμων ελέγχου ταυτότητας χωρίζεται σε τρεις ξεχωριστές κατηγορίες. Κάθε κλάση ορίζει τη συγκεκριμένη συμπεριφορά- εκεί πηγαίνουν όλες οι λεπτομέρειες υλοποίησης:
ενότητα AuthenticationStrategies
class CookiesΑυθεντικοποίηση
def self.authenticate_request(request)
puts "Υλοποιώ έναν αλγόριθμο ελέγχου ταυτότητας cookie"
end
end
κλάση JWTAuthentication
def self.authenticate_request(request)
puts "I implement a jwt authentication algorithm"
end
end
class ApiKeyAuthentication
def self.authenticate_request(request)
puts "I implement an api key authentication algorithm"
end
end
end
Στη συνέχεια, έχουμε μια κλάση περιβάλλοντος/πελάτη:
κλάση Αυθεντικοποίηση
def self.authenticate(authentication_strategy, request)
authentication_strategy.authenticate_request(request)
end
end
request = "Προσποιούμαι ότι είμαι ένα αίτημα"
Authentication.authenticate(AuthenticationStrategies::CookiesAuthentication, αίτημα)
Authentication.authenticate(AuthenticationStrategies::JWTAuthentication, αίτημα)
Authentication.authenticate(AuthenticationStrategies::ApiKeyAuthentication, αίτηση)
Το παραπάνω σενάριο παράγει:
Υλοποιώ έναν αλγόριθμο ελέγχου ταυτότητας cookie Υλοποιώ έναν αλγόριθμο ελέγχου ταυτότητας jwt Υλοποιώ έναν αλγόριθμο ελέγχου ταυτότητας με κλειδί api
Συνοψίζοντας
-
τα πρότυπα σχεδίασης είναι χρήσιμα εργαλεία για την επίλυση αρχιτεκτονικών προβλημάτων,
-
η γνώση των προτύπων σχεδίασης βελτιώνει την επικοινωνία σχετικά με την αρχιτεκτονική του συστήματος με άλλους προγραμματιστές,
-
το Πρότυπο Σχεδίασης Στρατηγικής ταιριάζει στις ανάγκες σας, αν έχετε ένα σύνολο αλγορίθμων που μπορούν να χρησιμοποιηθούν εναλλάξ σε ένα δεδομένο πλαίσιο.