Σενάριο: Έχω μια συνάρτηση που εκτελεί μια σχετικά πολύπλοκη διαδικασία (δεν είναι ένα από insert σε μια βάση). Μπορεί να κάνει π.χ. 5 δουλειές, οι οποίες μπορούν να εκτελεστούν και ανεξάρτητα. Επίσης κάθε μια από αυτές μπορεί να εκτελεστεί με κάποιες παραμέτρους. Ο λόγος που θέλω αυτή η συνάρτηση να είναι μόνο μια είναι γιατί θέλω να εκτελείται απομακρυσμένα. Οπότε θέλω να κάνω οικονομία τόσο στις κλήσεις που θα γίνουν προς τον server όσο και στο API του (να μην υπάρχουν πολλά overloads). Μπορεί εσωτερικά αυτή η συνάρτηση να εκτελεί τις 5 δουλειές καλώντας 5 private συναρτήσεις, αλλά αυτό είναι άλλο θέμα.
Ζητούμενο: Επειδή η παραμετροποίηση της κλήσης αυτής της συνάρτησης μπορεί να απαιτεί αρκετές παραμέτρους, δεν είναι σωστό να φιάξω π.χ. μια webmethod που να παίνει π.χ. 15 παραμέτρους. Δεν μπορώ επίσης γιατί κάποια στιγμή μπορεί να θέλω να προσθέσω μερικές ακόμα.
Λύση/pattern: Δεν ξέρω αν υπάρχει κάποιο συγκεκριμένο pattern για κάτι τέτοιο. Αυτό που σκέφτομαι να κάνω είναι να δημιουργήσω μια serializable class που θα λέγεται MyFunctionConfiguration και θα έχει όλες τις παραμέτρους που χρειάζεται η συνάρτησή μου. π.χ.:
public class MyFunctionConfiguration
public do_Job1 as boolean
public Job1_Param as integer
public do_Job2 as boolean
public Job2_Param as integer
......
end class
Έτσι το singature της webmethod θα είναι κάτι σαν αυτό: public function MyFunction(configuration as myfunctionconfiguration)
Μοιάζει λιγάκι με τον τρόπο που σχεδιάζονται τα delegates με τις κλάσεις eventargs.
Πως σας φαίνεται; Το έχετε ξαναδεί;
υγ. τώρα που το σκέφτομαι μοιάζει λίγο με το Command Pattern.
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.