Έχω μια φόρμα από την οποία οι χρήστες κάνουν επιλογή εκτυπώσεων από μια λίστα και κάνοντας click στο κουμπί print εκτυπώνεται το επιλεγμένο report. Θέλω να κάνω αυτή τη φόρμα αρκετά generic ώστε να χρησιμοποιείται σε οποιοδήποτε section της εφαρμογής που έχει reports και να είναι όσο το δυνατόν απλούστερο για τους developers να προσθέτουν τα δικά τους reports.
Όταν ο χρήστης επιλέγει ένα report, σε ένα διπλανό panel η φόρμα ανοίγει ένα έτοιμο user control (διαφορετικό για κάθε report) το οποίο μαζεύει τις απαραίτητες παραμέτρους. Μόλις γίνει click στο print, η φόρμα ζητάει από το user control τις παραμέτρους και τις μεταβιβάζει στο αντίστοιχο function που εμφανίζει το report.
Το μοντέλο είναι ουσιαστικά MVC με την φόρμα να είναι ο controller, το parameters user control να είναι το view, και οι παράμετροι (η αν θέλετε το object των παραμέτρων) να είναι το model.
Ο parent controller λοιπόν (από τον οποίο γίνονται inherit όλες οι φόρμες που κάνουν αυτή τη δουλιά, απλά με άλλα reports) έχει πάνω του μια μέθοδο AddReport την οποία χρησιμοποιούν οι developers για να προσθέσουν τα δικά τους reports σαν επιλογές. Αυτή θα πρέπει να δέχεται τα εξής ορίσματα:
- Τον τίτλο του report
- Τον τύπο του user control το οποίο μαζεύει τις απαιτούμενες παραμέτρους
- Την συνάρτηση η οποία πρέπει να κληθεί για να πάρει τις παραμέτρους και να εμφανίσει το report
Το πρόβλημά μου είναι ουσιαστικά στο 3. Μια επιλογή που έχω υλοποιήσει είναι μέσα στο instance του controller που δουλεύω να ορίζω ένα delegate sub με τα ορίσματα της αντίστοιχης συνάρτησης και να το περνάω στο AddReport σαν System.Delegate για να το κάνω αργότερα invoke. Η λύση αυτή δεν μου αρέσει όμως γιατί αναγκάζει τους developers (juniors) να μπλέκουν με τη λέξη delegate.
Θα ήθελα να το αντικαταστήσω με ένα απλό addressOf που είναι πολύ πιο εύκολα κατανοητό. Αυτό όμως προϋποθέτει ότι ουσιαστικά υπάρχει δηλωμένο ένα generic delegate μέσα στο controller base, το οποίο από τη στιγμή δεν ξέρει όλους τους τύπους models που μπορεί να λάβει σαν παραμέτρους θα με ρίξει σε boxing το οποίο θα μου φέρει άλλα προβλήματα μετά.
Θα ήθελα απόψεις / λύσεις, με στόχο την όσο το δυνατόν μεγαλύτερη απλοποίηση της χρήσης για τους developers.
tnx.
Χρήστος Γεωργακόπουλος