Τα design patterns είναι ουσιαστικά, μοτίβα τα οποία έχουν προκύψει από την ανάγκη προτυποποίησης κάποιων πραγμάτων. Αυτό σημαίνει, πρακτικά, οτι κάτι που κάνουν πολλοί άνθρωποι για τον ίδιο λόγο με παραπλήσιους τρόπους, κάποια στιγμή πήρε ένα όνομα και έγινε pattern. Ετσι, πολλές φορές είναι δύσκολο να πάμε "αντίστροφα", και να αξιολογήσουμε τις συνθήκες που πρέπει να ισχύουν για να χρησιμοποιήσουμε ένα design pattern.
Ορισμένα (π.χ. GoF observer) δεν χρειάζεται να τα χρησιμοποιήσεις, μια και είναι ενσωματωμένα στο προγραμματιστικό μοντέλο του .net (event model). Αλλα, όπως π.χ. το GoF singleton, είναι πιό εύκολο να χρησιμοποιηθούν, απλά χρειάζεται αρκετή εμπειρία για να αναγνωρίσεις τις συνθήκες κάτω από τις οποίες θα μπορούσε πραγματικά να σε βοηθήσει κάτι τέτοιο χωρίς να οδηγήσει σε over-engineering.
Ας δούμε το Singleton, μια και το πιάσαμε: Τι κάνει; Σου δίνει μόνο ένα instance της κλάσης σου. Πού το χρειάζεσαι; Οταν η χρήση π.χ. static (shared στη VB) members δεν σε καλύπτει. Πότε δεν σε καλύπτει; Οταν π.χ. θέλεις να αποθηκεύεις το state του αντικειμένου σου ώστε να κάνεις rollback σε προηγούμενα states ή να κρατάς ιστορικό, ή όταν θέλεις κατά βούληση και με εύκολο τρόπο να "πετάς" το state του και να φτιάχνεις ένα νέο αντικείμενο, εξασφαλίζοντας και πάλι όμως οτι θα έχεις το πολύ ένα instance. Οχι οτι όλα αυτά δεν μπορείς να τα κάνεις με shared / static, όμως θα σου έσπαγαν τα νεύρα και θα έπρεπε να εφεύρεις δεκάδες non-standard "κόλπα" για να πετύχεις την ίδια λειτουργικότητα. Γι'αυτό και το singleton pattern έχει νόημα ύπαρξης.
Η σωστή χρήση των patterns, γενικά, είναι ένα δύσκολο θέμα. Ενας βασικός εμπειρικός κανόνας που πρέπει κανείς να έχει υπόψη ειναι οτι τα patterns υπάρχουν για να κάνουν τη ζωή μας (και τη συντήρηση του κώδικά μας) ευκολότερη. Αν η επιλογή ενός pattern φαίνεται οτι παράγει κώδικα πιό συντηρήσιμο, που κάνει ακριβώς αυτό που θα θέλαμε και που αναγνωρίζεται εύκολα από έναν τρίτο προγραμματιστή (δεδομένου οτι είναι πολύ πιό εύκολο να πεις "εδώ χρησιμοποιείται το pattern x" από το να πεις "εδώ έχω κάνει καμμια 15αριά κολπάκια για να κάνω αυτό κι εκείνο"), τότε η επιλογή του έχει νόημα. Αλλιώς, ζούμε και χωρίς patterns, δεν είναι αναγκαστική η χρήση τους.
Σωτήρης Φιλιππίδης
DotSee Web Services