<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Design &amp; Architecture</title><link>https://www.dotnetzone.gr:443/cs/forums/16/ShowForum.aspx</link><description>Θέματα αρχιτεκτονικής και σχεδιασμού εφαρμογών (design patterns, object orientation, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17916.aspx</link><pubDate>Wed, 04 Oct 2006 20:36:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17916</guid><dc:creator>thAAAnos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17916.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=17916</wfw:commentRss><description>Νομίζω οτι αυτό που θές είναι το "Half Object Plus Protocol" Pattern. Δες το αν σε βολευει...</description></item><item><title>Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17188.aspx</link><pubDate>Tue, 26 Sep 2006 06:06:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17188</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17188.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=17188</wfw:commentRss><description>Ευχαριστώ που το ανέφερες!</description></item><item><title>Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17186.aspx</link><pubDate>Tue, 26 Sep 2006 05:57:10 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17186</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17186.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=17186</wfw:commentRss><description>Το Pattern αυτό χρησιμοποιείτε πολύ στο MS CRM. Διαβάζοντας το SDK θα δείτε ότι και οι προγραμματιστές τις Microsoft έτσι περνάνε τις παραμέτρους ακόμα και για αστεία πράγματα. Απλά το αναφέρω σαν σχόλια στην ερώτηση αν το έχουμε δει να χρησιμοποιείται σε κάποια εφαρμογή.</description></item><item><title>Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17156.aspx</link><pubDate>Mon, 25 Sep 2006 22:55:53 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17156</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17156.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=17156</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;cap wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt;
&lt;P&gt;Δημήτρη δεν σε εξυπηρετει κάποια παραλλαγή του &lt;A href="http://www.dofactory.com/Patterns/PatternFacade.aspx"&gt;Facade Pattern &lt;/A&gt;για αυτή τη δουλειά; Με την έννοια οτι οι διαδικασίες που θέλεις να εκτελέσεις μπορεί να είναι σε μια ή σε πολλαπλές κλάσεις, αλλά θα μπορούσες να έχεις ένα layer από πάνω για να μαζεύει όλη τη λογική των κλήσεων "απλοποιώντας το υποσύστημα".&lt;/P&gt;
&lt;P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Σωστά. Ουσιαστικά αυτή η συνάρτηση που θέλω να κάνω είναι το Facade για όλες αυτές τις δουλειές που θα κάνει. Απλά δεν σκέφτηκα να την ονομάσω έτσι.&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;mns wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt;...&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Ακριβώς έτσι το σκέφτηκα και εγώ. Όσο για την παρέμετρο-string, το θεωρώ και εγώ λίγο άναρχο. Προτιμώ την κλάση μια που θα βοηθήσει στην αποφυγή bugs, μετά από καιρό.&lt;/P&gt;
&lt;P&gt;Οπότε χρησιμοποιώ Facade και Command pattern! Εντυπωσιάστηκα!!!&lt;/P&gt;
&lt;P&gt;Thank you both!&lt;/P&gt;</description></item><item><title>Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17155.aspx</link><pubDate>Mon, 25 Sep 2006 22:28:15 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17155</guid><dc:creator>Νατάσα Μανουσοπούλου</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17155.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=17155</wfw:commentRss><description>Αυτό που σκέφτεσαι να κάνεις είναι μια πολύ καλή λύση, και αν το καλοσκεφτείς είναι και ο τρόπος που χρησιμοποιείται κατά κόρον και στο Windows API. Σου δίνει τη δυνατότητα να έχεις καθαρότερο κώδικα (γιατί οι κλήσεις συναρτήσεων με 15 παραμέτρους είναι *άσχημες*), να κάνεις τη function σου επεκτάσιμη χωρίς να της αλλάξεις το signature (περνάς ένα MyFunctionConfiguration-derived), και βέβαια, σε αυτές τις γλώσσες που το όνομά τους ξεκινά από C και δεν έχουν default values στις παραμέτρους τους γλιτώνεις τα πολλά overloading ή τα μαζικά search and replace κάθε φορά που πρέπει να προσθέσεις ένα νέο option.&lt;br&gt;Ένας-δύο constructors (ή και παραπάνω) που θα σε βοηθήσουν να γεμίσεις εύκολα το structure είναι επίσης απαραίτητοι.&lt;br&gt;&lt;br&gt;Επιπλέον αυτού, υπάρχει και η (για άλλους άναρχη, για άλλους ευέλικτη) σχολή που λέει να περάσεις ένα string για παράμετρο, που θα είναι XML, και να το ερμηνεύεις κατά το δοκούν.&lt;br&gt;</description></item><item><title>Απ: Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17154.aspx</link><pubDate>Mon, 25 Sep 2006 22:25:59 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17154</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17154.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=17154</wfw:commentRss><description>&lt;P&gt;Δημήτρη δεν σε εξυπηρετει κάποια παραλλαγή του &lt;A href="http://www.dofactory.com/Patterns/PatternFacade.aspx"&gt;Facade Pattern &lt;/A&gt;για αυτή τη δουλειά; Με την έννοια οτι οι διαδικασίες που θέλεις να εκτελέσεις μπορεί να είναι σε μια ή σε πολλαπλές κλάσεις, αλλά θα μπορούσες να έχεις ένα layer από πάνω για να μαζεύει όλη τη λογική των κλήσεων "απλοποιώντας το υποσύστημα".&lt;/P&gt;
&lt;P&gt;Η παραλλαγή που σκέφτομαι είναι να περνάς στο Facade σου αυτή τη serializable κλάση που θέλεις και αυτό να είναι αρκετά "εξυπνο" ωστε ακόμα και από την ονοματολογία των παραμέτρων (που ίσως θα μπορούσες να τις δίνεις σαν name/value pairs και να κάνεις μετά το casting που θέλεις) να ξέρει τι πρέπει να καλέσει κάθε φορά...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Παραμετροποίηση κλήσης μιας πολύπλοκης συνάρτησης</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17153.aspx</link><pubDate>Mon, 25 Sep 2006 22:08:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17153</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17153.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=17153</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Σενάριο&lt;/STRONG&gt;: Έχω μια συνάρτηση που εκτελεί μια σχετικά πολύπλοκη διαδικασία (δεν είναι ένα από insert σε μια βάση). Μπορεί να κάνει π.χ. 5 δουλειές, οι οποίες μπορούν να εκτελεστούν και ανεξάρτητα. Επίσης κάθε μια από αυτές μπορεί να εκτελεστεί με κάποιες παραμέτρους. Ο λόγος που θέλω αυτή η συνάρτηση να είναι μόνο μια είναι γιατί θέλω να εκτελείται απομακρυσμένα. Οπότε θέλω να κάνω οικονομία τόσο στις κλήσεις που θα γίνουν προς τον server όσο και στο API του (να μην υπάρχουν πολλά overloads). Μπορεί εσωτερικά αυτή η συνάρτηση να εκτελεί τις 5 δουλειές καλώντας 5 private συναρτήσεις, αλλά αυτό είναι άλλο θέμα.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Ζητούμενο&lt;/STRONG&gt;: Επειδή η παραμετροποίηση της κλήσης αυτής της συνάρτησης μπορεί να απαιτεί αρκετές παραμέτρους, δεν είναι σωστό να φιάξω π.χ. μια webmethod που να παίνει π.χ. 15 παραμέτρους. Δεν μπορώ επίσης γιατί κάποια στιγμή μπορεί να θέλω να προσθέσω μερικές ακόμα.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Λύση/pattern&lt;/STRONG&gt;: Δεν ξέρω αν υπάρχει κάποιο συγκεκριμένο pattern για κάτι τέτοιο. Αυτό που σκέφτομαι να κάνω είναι να δημιουργήσω μια serializable class που θα λέγεται MyFunctionConfiguration και θα έχει όλες τις παραμέτρους που χρειάζεται η συνάρτησή μου. π.χ.:&lt;/P&gt;
&lt;P&gt;public class MyFunctionConfiguration&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public do_Job1 as&amp;nbsp;boolean&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public Job1_Param as integer&lt;BR&gt;&amp;nbsp;&amp;nbsp; public do_Job2 as boolean&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;Job2_Param as integer&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;......&lt;BR&gt;end class&lt;/P&gt;
&lt;P&gt;Έτσι το singature της webmethod θα είναι κάτι σαν αυτό: public function MyFunction(configuration as myfunctionconfiguration)&lt;/P&gt;
&lt;P&gt;Μοιάζει λιγάκι με τον τρόπο που σχεδιάζονται τα delegates με τις κλάσεις eventargs.&lt;/P&gt;
&lt;P&gt;Πως σας φαίνεται; Το έχετε ξαναδεί;&lt;/P&gt;
&lt;P&gt;υγ. τώρα που το σκέφτομαι μοιάζει λίγο με το &lt;A target=_blank href="http://www.dofactory.com/Patterns/PatternCommand.aspx"&gt;Command Pattern&lt;/A&gt;.&lt;/P&gt;</description></item></channel></rss>