Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης

Îåêßíçóå áðü ôï ìÝëïò Dimitris Papadimitriou. Τελευταία δημοσίευση από το μέλος thAAAnos στις 04-10-2006, 13:36. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  25-09-2006, 15:08 17153

    Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης

    Σενάριο: Έχω μια συνάρτηση που εκτελεί μια σχετικά πολύπλοκη διαδικασία (δεν είναι ένα από 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.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  25-09-2006, 15:25 17154 σε απάντηση της 17153

    Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης

    Δημήτρη δεν σε εξυπηρετει κάποια παραλλαγή του Facade Pattern για αυτή τη δουλειά; Με την έννοια οτι οι διαδικασίες που θέλεις να εκτελέσεις μπορεί να είναι σε μια ή σε πολλαπλές κλάσεις, αλλά θα μπορούσες να έχεις ένα layer από πάνω για να μαζεύει όλη τη λογική των κλήσεων "απλοποιώντας το υποσύστημα".

    Η παραλλαγή που σκέφτομαι είναι να περνάς στο Facade σου αυτή τη serializable κλάση που θέλεις και αυτό να είναι αρκετά "εξυπνο" ωστε ακόμα και από την ονοματολογία των παραμέτρων (που ίσως θα μπορούσες να τις δίνεις σαν name/value pairs και να κάνεις μετά το casting που θέλεις) να ξέρει τι πρέπει να καλέσει κάθε φορά...

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  25-09-2006, 15:28 17155 σε απάντηση της 17153

    Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης

    Αυτό που σκέφτεσαι να κάνεις είναι μια πολύ καλή λύση, και αν το καλοσκεφτείς είναι και ο τρόπος που χρησιμοποιείται κατά κόρον και στο Windows API. Σου δίνει τη δυνατότητα να έχεις καθαρότερο κώδικα (γιατί οι κλήσεις συναρτήσεων με 15 παραμέτρους είναι *άσχημες*), να κάνεις τη function σου επεκτάσιμη χωρίς να της αλλάξεις το signature (περνάς ένα MyFunctionConfiguration-derived), και βέβαια, σε αυτές τις γλώσσες που το όνομά τους ξεκινά από C και δεν έχουν default values στις παραμέτρους τους γλιτώνεις τα πολλά overloading ή τα μαζικά search and replace κάθε φορά που πρέπει να προσθέσεις ένα νέο option.
    Ένας-δύο constructors (ή και παραπάνω) που θα σε βοηθήσουν να γεμίσεις εύκολα το structure είναι επίσης απαραίτητοι.

    Επιπλέον αυτού, υπάρχει και η (για άλλους άναρχη, για άλλους ευέλικτη) σχολή που λέει να περάσεις ένα string για παράμετρο, που θα είναι XML, και να το ερμηνεύεις κατά το δοκούν.

    Νατάσα Μανουσοπούλου
  •  25-09-2006, 15:55 17156 σε απάντηση της 17154

    Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης

     cap wrote:

    Δημήτρη δεν σε εξυπηρετει κάποια παραλλαγή του Facade Pattern για αυτή τη δουλειά; Με την έννοια οτι οι διαδικασίες που θέλεις να εκτελέσεις μπορεί να είναι σε μια ή σε πολλαπλές κλάσεις, αλλά θα μπορούσες να έχεις ένα layer από πάνω για να μαζεύει όλη τη λογική των κλήσεων "απλοποιώντας το υποσύστημα".

    Σωστά. Ουσιαστικά αυτή η συνάρτηση που θέλω να κάνω είναι το Facade για όλες αυτές τις δουλειές που θα κάνει. Απλά δεν σκέφτηκα να την ονομάσω έτσι.

     mns wrote:
    ...

    Ακριβώς έτσι το σκέφτηκα και εγώ. Όσο για την παρέμετρο-string, το θεωρώ και εγώ λίγο άναρχο. Προτιμώ την κλάση μια που θα βοηθήσει στην αποφυγή bugs, μετά από καιρό.

    Οπότε χρησιμοποιώ Facade και Command pattern! Εντυπωσιάστηκα!!!

    Thank you both!


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  25-09-2006, 22:57 17186 σε απάντηση της 17156

    Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης

    Το Pattern αυτό χρησιμοποιείτε πολύ στο MS CRM. Διαβάζοντας το SDK θα δείτε ότι και οι προγραμματιστές τις Microsoft έτσι περνάνε τις παραμέτρους ακόμα και για αστεία πράγματα. Απλά το αναφέρω σαν σχόλια στην ερώτηση αν το έχουμε δει να χρησιμοποιείται σε κάποια εφαρμογή.
  •  25-09-2006, 23:06 17188 σε απάντηση της 17186

    Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης

    Ευχαριστώ που το ανέφερες!
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  04-10-2006, 13:36 17916 σε απάντηση της 17153

    Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης

    Νομίζω οτι αυτό που θές είναι το "Half Object Plus Protocol" Pattern. Δες το αν σε βολευει...
    ->Hail Eris All Hail Discordia<-
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems