Γενικά δύο τρόποι υπάρχουν για να εκτελείς κάτι έχοντας ένα (ή κανένα) instance της κλάσης σου ενεργό:
- Static (ή shared στη VB)
- Singleton design pattern
Με τον πρώτο τρόπο δεν έχεις απολύτως κανένα instance.
Με τον δεύτερο, έχεις ακριβώς ένα instance.
Άποψή μου είναι οτι ενδείκνυται η χρήση static μεθόδων (η και κλάσεων, στο .NET 2.0) όταν δεν σε ενδιαφέρει κανένα είδος state για την κλάση σου. Ητοι, οι κλήσεις που κάνεις στις μεθόδους σου έχουν την έννοια των "εντολών" (commands) οι οποίες είναι αυτόνομες και τελειώνουν εκεί χωρίς να επηρεαζουν άλλα πράγματα που πιθανώς ανήκουν στην κλάση.
Οταν όμως σε ενδιαφέρει το state, δηλαδή υπάρχουν member variables στην κλάση αυτή τα οποία αλλάζουν τιμή σύμφωνα με τις κλήσεις σου, και ενδεχομένως να θέλεις να κρατήσεις παλαιά states (αποθηκεύοντάς τα με κάποια μορφή serialization ή κάνοντας οτιδήποτε άλλο με αυτά) με σκοπό να τα ξαναχρησιμοποιήσεις αργότερα, τότε ενδείκνυται η singleton. Επίσης όταν παίζεις με serviced components, απο ο,τι θυμάμαι (διορθώστε με αν κάνω λάθος) δεν έχεις άλλον τρόπο.
Τωρα, υπάρχει το εξής θέμα: Αν η εφαρμογή σου είναι multi-threaded και πολλά threads καλούν ταυτόχρονα τις μεθόδους της κλάσης σου, ίσως θα πρέπει να σκεφτεί κανείς να μην χρησιμοποιήσει ούτε static ούτε singleton pattern, αλλά κανονικά instances. Βεβαια, αυτό εξαρτάται κάθε φορά από το context.
Σωτήρης Φιλιππίδης
DotSee Web Services