<?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>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/60405.aspx</link><pubDate>Mon, 04 Oct 2010 06:41:44 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:60405</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/60405.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=60405</wfw:commentRss><description>Τελικά τι γίνεται με αυτό το πρόβλημα; Η λύση περπατάει;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59838.aspx</link><pubDate>Tue, 31 Aug 2010 17:42:11 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59838</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59838.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59838</wfw:commentRss><description>&lt;P&gt;Μόλις γύρισα από τις ολιγοήμερες διακοπές μου και είδα ότι όσο χρόνο έλειπα το Thread δεν πέθανε. &lt;/P&gt;
&lt;P&gt;Και οι δύο πιάσατε ακριβώς το πρόβλημα. Και ο Markos έχει δίκιο σε αυτό που γράφει αλλά και ο George επίσης. Είναι το πιο δύσκολο UI που θα έχω φτιάξει μέχρι τώρα και αυτό το κατάλαβα από νωρίς. Να πω μερικά πράγματα σχεδιασμού ακόμα. &lt;/P&gt;
&lt;P&gt;Το σενάριο μεταξύ δύο χρηστών όπου ο ένας κάνει μία αλλαγή πότε θα την δει ο άλλος. Εδώ και αρκετό καιρό έχω φτιάξει ένα προγραμματάκι το οποίο στήνεται στον Server και λαμβάνει μηνύματα από τους clients. Επειδή το πρόβλημα των αλλαγών των χρηστών δεν εμφανίζεται μόνο σε αυτό το πρόγραμμα αλλά και σε άλλα είχα αποφασίσει πριν καιρό να φτίάξω αυτό το πρόγραμμα, το οποίο όταν γίνει κάποια αποθήκευση από κάποιον client ενημερώνεται με message από το συγκεκριμένο client και στην συνέχεια ενημερώνει τα υπόλοιπα clients του δικτύου με ένα μήνυμα τύπου Entity-Client, Id-104, Action-Created. Ο κάθε client ανάλογα με το μήνυμα θα κάνει και την ανάλογη ενέργεια για να ενημερώσει το UI του χρήστη.&amp;nbsp;Το πρόγραμμα αυτό&amp;nbsp;με έχει βολέψει πάρα πολύ και πρόσφατα του πρόσθεσα και την δυνατότητα να κρατάει log κινήσεων κτλ. Οπότε σκεφτόμουν να χρησιμοποιήσω&amp;nbsp;την ίδια προσέγγιση για την λύση του προβλήματος των χρηστών και τις αλλαγές μεταξύ τους.&lt;/P&gt;
&lt;P&gt;Στο UI τώρα ο Markos το έχει πιάσει ακριβώς.&amp;nbsp;Έτσι το σκέφτομαι και έτσι θα ήθελα να το κάνω. Νόμιζα και νομίζω ότι το Binding&amp;nbsp;θα πρέπει να είναι μία τεχνολογία που πρέπει να χρησιμοποιήσω. Μου λύνει το πρόβλημα των Notification μεταξύ των φορμών και των entity. Αλλάζω κάτι σε ένα entity σε μία φόρμα, αυτόματα&amp;nbsp;η αλλαγή φαίνεται και σε άλλο σημείο του UI.&amp;nbsp;Επίσης μου λύνει το πρόβλημα της εμφάνισης λαθών που υπάρχουν μέσα στα entities μου. To&amp;nbsp;Binding όμως θέλει DataTables ή Classes που να έχουν properties. Τα DataTables τα άφησα στην άκρη και πήγα στις Classes.&amp;nbsp;Έτσι κατέληξα σε αυτό που λέω Composite Entities. Είναι όμως η σωστή προσέγγιση; Δεν ξέρω.&lt;/P&gt;
&lt;P&gt;Επίσης μην αναφέρεται WPF.&amp;nbsp;Αν και έχω αρχίσει ήδη να ασχολούμαι με&amp;nbsp;αυτό δεν μπορώ να πω ότι αισθάνομαι άνετα ακόμα για ανάπτυξη εφαρμογής. Το project είναι καθαρά Winforms. &amp;nbsp;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59827.aspx</link><pubDate>Mon, 30 Aug 2010 04:11:23 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59827</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59827.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59827</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;George J. Capnias:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;/P&gt;
&lt;P&gt;Και πως αυτό το κάνει διαφορετικό, από το ανοίγουν πολλοί χρήστες, την ίδια φόρμα;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;Η περίπτωση του "πολλοί χρήστες που επεξεργάζονται το ίδιο entity", είναι μια πιο γενική περίπτωση του "ένας χρήστης επεξεργάζεται το ίδιο entity περισσότερες από μία φορές", ή κάνω λάθος;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;George J.&lt;BR&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Ένα - ένα τα προβλήματα... Οι αλλαγές που έχει κάνει ένας άλλος χρήστης έχουν&lt;STRONG&gt; ήδη περαστεί&lt;/STRONG&gt; στη βάση, είναι committed και ο άλλος χρήστης λαμβάνει γνώση γι' αυτές μέσω κάποιου μηχανισμού (poll ή ένα message από τον server, όπως έγραψες). Πρόκειται για ένα βήμα παραπέρα. Το πρόβλημα του "&lt;EM&gt;επεξεργάζομαι το ίδιο entity πολλές φορές, σε διαφορετικές φόρμες, άλλες grid - άλλες detail και όλ' αυτά θέλω να συγχρονίζονται στο UI&lt;/EM&gt;" είναι κατά τη γνώμη μου&amp;nbsp;άλλης φύσης. Οι αλλαγές μπορεί να γίνουν commit, &lt;STRONG&gt;μπορεί και όχι&lt;/STRONG&gt; (αλλά πρέπει να φαίνονται σε όλες τις "εμπλεκόμενες" φόρμες). Ενδέχεται να ανοίξω μια detail&amp;nbsp;φόρμα για fast entry και να κάνω add σε entities, αλλά θέλω τα additions να φαίνονται στο grid που έχω "πίσω μου" και&amp;nbsp;που εμφανίζει όλες τις εγγραφές μαζί. Αλλάζω, όμως γνώμη τελευταία στιγμή και κάνω &lt;STRONG&gt;cancel&lt;/STRONG&gt; στις προσθήκες. Άλλo παράδειγμα: Έχω ανοιχτή μια detail φόρμα που επεξεργάζομαι ένα entity, το οποίο υπάρχει σε άλλη φόρμα σε ένα grid. Κάτι συμβαίνει διακόπτω την εργασία μου και όταν γυρίζω, "μπαίνω" στο grid, διαγράφω το entity και κάνω commit τη διαγραφή. Περιμένω, λοιπόν, να κλείσει και η φόρμα του detail χωρίς να κάνω κάποια περαιτέρω ενέργεια. Μιλάμε δηλαδή για ένα UI στο οποίο συμβαίνουν &lt;STRONG&gt;πολύ ωραία πραγματάκια ταυτόχρονα&lt;/STRONG&gt;. Νομίζω, λοιπόν,&amp;nbsp;ότι η ερώτηση που έκανε το μέλος είναι για το πως μπορεί να&amp;nbsp;υλοποιηθεί ένας τέτοιος μηχανισμός, ώστε να επιτυγχάνεται μιας τέτοιας μορφής synchonization στο UI. Βεβαίως, ρώτησε και πως να σχεδιάσει τα objects του για να γίνει το εγχείρημα&amp;nbsp;πιο εύκολο. Τώρα, αν σ' αυτό το "χαμό" βάλουμε και τα notifications από τη βάση...&amp;nbsp;Ομολογώ, δεν το έχω ξανακάνει και απλά&amp;nbsp;καταθέτω κάποιες σκέψεις για το πως μπορεί να επιτευχθεί. Κάποιος που το έχει ξανακάνει μπορεί να γίνει πολύ πιο συγκεκριμένος και να μας βάλει στο σωστό δρόμο.&lt;/P&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59824.aspx</link><pubDate>Mon, 30 Aug 2010 03:14:54 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59824</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59824.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59824</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Markos:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;Εγώ γιατί έχω καταλάβει ότι &lt;strong&gt;δεν αναφέρεται&lt;/strong&gt; σ' αυτό; Δε νομίζω ότι ρωτάει πως ο ένας χρήστης θα βλέπει τις αλλαγές που κάνει ο άλλος. Θέλει έναν τρόπο να συγχρονίζει τα δεδομένα&amp;nbsp;στις φόρμες του &lt;strong&gt;ίδιου&lt;/strong&gt; χρήστη. Ο &lt;strong&gt;ίδιος&lt;/strong&gt; χρήστης να μπορεί ν' ανοίγει &lt;strong&gt;πολλαπλές φόρμες&lt;/strong&gt; (άλλες grid, άλλες detail), με τα κοινά δεδομένα, και οι &lt;strong&gt;αλλαγές&lt;/strong&gt; που γίνονται στα properties ενός entity -&amp;nbsp;αν αυτό το entity υπάρχει και στις υπόλοιπες φόρμες - να εμφανίζονται ταυτόχρονα&amp;nbsp;&lt;strong&gt;κι εκεί&lt;/strong&gt;, με όλα όσα αυτό συνεπάγεται στο γενικότερο συγχρονισμό&amp;nbsp;των φορμών (π.χ. validation). Το πλήθος των φορμών δεν είναι γνωστό από την αρχή και η πιο ακραία περίπτωση είναι ένας χρήστης να παίζει με το button του "open form" και ν' ανοίγει &lt;strong&gt;πολλαπλές detail φόρμες&lt;/strong&gt; για το &lt;strong&gt;ίδιο entity&lt;/strong&gt;. Αφού βαρεθεί να παίζει, να μπορεί να στείλει τις αλλαγές στη βάση&amp;nbsp;απ' όποια φόρμα θέλει&amp;nbsp;και όλες οι υπόλοιπες detail φόρμες να ξέρουν ότι το state του entity δεν είναι πια modified, αλλά current. Αν η αποθήκευση δεν πραγματοποιηθεί, όλες οι φόρμες να ενημερωθούν γι' το σφάλμα κ.λπ, κ.λπ.&lt;/p&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Και πως αυτό το κάνει διαφορετικό, από το ανοίγουν πολλοί χρήστες, την ίδια φόρμα;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Η περίπτωση του "πολλοί χρήστες που επεξεργάζονται το ίδιο entity", είναι μια πιο γενική περίπτωση του "ένας χρήστης επεξεργάζεται το ίδιο entity περισσότερες από μία φορές", ή κάνω λάθος;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;George J.&lt;br&gt;&lt;br&gt;&lt;/div&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59823.aspx</link><pubDate>Mon, 30 Aug 2010 00:58:38 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59823</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59823.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59823</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;George J. Capnias:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;/P&gt;
&lt;P&gt;Παράδειγμα: Αν δύο&amp;nbsp;διαφορετικοί&amp;nbsp;χρήστες, βλέπουν την ίδια καρτέλα και ο ένας αλλάξει τα δεδομένα και θέλουμε ο άλλος να δει την αλλαγή, τι πραγματικά συμβαίνει:&lt;/P&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;UL&gt;
&lt;LI&gt;Αυτός που βλέπει τα δεδομένα θα δει τις αλλαγές όταν
&lt;UL&gt;
&lt;LI&gt;είτε ο client του κάνει ένα poll και καταλάβει ότι άλλαξαν τα δεδομένα (disconnected enviroment),&amp;nbsp;
&lt;LI&gt;είτε λάβει ένα message από το server ότι άλλαξαν τα δεδομένα (always connected enviroment).&amp;nbsp;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Στην πρώτη&amp;nbsp;περίπτωση,&amp;nbsp;ο client σε τακτά χρονικά διαστήματα κάνει poll στον server για να δει αν υπάρχουν αλλαγές. Καταλαβαίνουμε ότι ένα μεγάλο ποσοστό των polls θα είναι άχρηστο, μιας και δεν θα έχουμε τόσες πολλές αλλαγές, και ταυτόχρονα θα&amp;nbsp;επιβαρύνεται&amp;nbsp;ο server κάθε φορά που θα πρέπει να απαντάει σε αυτά τα polls.
&lt;LI&gt;Στην δεύτερη περίπτωση, ο client έχει ανοιχτή σύνδεση στον server, και αναμένει ένα message. Σε αυτή την περίπτωση, o client θα περιμένει τον περισσότερο καιρό χωρίς να λαμβάνει τίποτα, απλά καταναλώνοντας resources από τον server.
&lt;LI&gt;Και στις δύο περιπτώσεις, σε περιβάλλοντα που υπάρχει μεγάλος φόρτος "πραγματικής εργασίας", ο φόρτος που προσδίδεται είτε από τον client με τα συνεχή polls στον server, είτε τα resources που καταναλώνονται στον server με την συνεχή σύνδεση τους με τον client,&amp;nbsp;συνεισφέρουν&amp;nbsp;αρνητικά&amp;nbsp;στις επιδόσεις του συστήματος.
&lt;LI&gt;Δεν υπάρχει "χρυσός κανόνας" για το πως θα πρέπει να υλοποιηθεί η πολιτική - είναι αυτό που είπα παραπάνω ότι όλα&amp;nbsp;εξαρτιούνται&amp;nbsp;από το "πόσο σωστά έχεις κάνει την εκτίμησή σου". Η&amp;nbsp;αλήθεια&amp;nbsp;είναι ότι το σύνηθες είναι η υλοποίηση να είναι μέρος ή/και&amp;nbsp;συνδυασμός&amp;nbsp;σημείων από τις δύο παραπάνω περιπτώσεις.&lt;/LI&gt;&lt;/UL&gt;
&lt;DIV&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Εγώ γιατί έχω καταλάβει ότι &lt;STRONG&gt;δεν αναφέρεται&lt;/STRONG&gt; σ' αυτό; Δε νομίζω ότι ρωτάει πως ο ένας χρήστης θα βλέπει τις αλλαγές που κάνει ο άλλος. Θέλει έναν τρόπο να συγχρονίζει τα δεδομένα&amp;nbsp;στις φόρμες του &lt;STRONG&gt;ίδιου&lt;/STRONG&gt; χρήστη. Ο &lt;STRONG&gt;ίδιος&lt;/STRONG&gt; χρήστης να μπορεί ν' ανοίγει &lt;STRONG&gt;πολλαπλές φόρμες&lt;/STRONG&gt; (άλλες grid, άλλες detail), με τα κοινά δεδομένα, και οι &lt;STRONG&gt;αλλαγές&lt;/STRONG&gt; που γίνονται στα properties ενός entity -&amp;nbsp;αν αυτό το entity υπάρχει και στις υπόλοιπες φόρμες - να εμφανίζονται ταυτόχρονα&amp;nbsp;&lt;STRONG&gt;κι εκεί&lt;/STRONG&gt;, με όλα όσα αυτό συνεπάγεται στο γενικότερο συγχρονισμό&amp;nbsp;των φορμών (π.χ. validation). Το πλήθος των φορμών δεν είναι γνωστό από την αρχή και η πιο ακραία περίπτωση είναι ένας χρήστης να παίζει με το button του "open form" και ν' ανοίγει &lt;STRONG&gt;πολλαπλές detail φόρμες&lt;/STRONG&gt; για το &lt;STRONG&gt;ίδιο entity&lt;/STRONG&gt;. Αφού βαρεθεί να παίζει, να μπορεί να στείλει τις αλλαγές στη βάση&amp;nbsp;απ' όποια φόρμα θέλει&amp;nbsp;και όλες οι υπόλοιπες detail φόρμες να ξέρουν ότι το state του entity δεν είναι πια modified, αλλά current. Αν η αποθήκευση δεν πραγματοποιηθεί, όλες οι φόρμες να ενημερωθούν γι' το σφάλμα κ.λπ, κ.λπ.&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59820.aspx</link><pubDate>Sun, 29 Aug 2010 23:38:26 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59820</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59820.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59820</wfw:commentRss><description>Είναι τρεις μέρες τώρα που θέλω να απαντήσω σε αυτό το thread και δεν βρήσκω τον χρόνο - μάλλον η full season άρχισε ποιο νωρίς από ότι περίμενα...&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ας αρχίσω από τα πιο εμφανή σημεία:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Η βάση μπορεί να υλοποιηθεί με πίνακες που μεταξύ τους θα έχουν 1-1 σχέση. Ένας πίνακας θα είναι οι εργαζόμενοι που θα είναι reference για τους άλλους πίνακες - έτσι ο πίνακας, με τους οδηγούς, έχει 1-1 σχέση με τον πίνακα εργαζόμενοι, όπως και ο πίνακας με τους μηχανικούς. Παρόμοια μπορεί να&amp;nbsp;αντιμετωπιστεί&amp;nbsp;και ο πίνακας με τα δεδομένα που απαιτούνται για την μισθοδοσία. Ένα παράδειγμα υλοποίησης για ένα παρόμοιο σενάριο - αρκετά πιο πολύπλοκο - είναι η βάση AdventureWorks, που έρχεται με τα samples του Microsoft SQL Server.&amp;nbsp;Δεν νομίζω ότι υπάρχει κάτι περισσότερο να πω επάνω σε αυτό.&lt;/li&gt;&lt;li&gt;Data Access - θα πρέπει να χρησιμοποιήσεις κάποια από τις έτοιμες τεχνολογίες για αυτό - δεν απαιτείται να φτιάξεις κάτι από μόνος σου.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Από αυτά που αναφέρεις, αυτό που καταλαβαίνω είναι ότι αυτό που σε ενδιαφέρει, είναι ότι όταν δύο διαφορετικοί χρήστες βλέπουν τα δεδομένα και ο ένας κάνει αλλαγές, θα πρέπει οι αλλαγές να είναι ορατές και στον άλλο χρήστη. Αυτό είναι το σημείο που μιλάμε για το &lt;a href="http://en.wikipedia.org/wiki/Concurrency_(computer_science)"&gt;concurrency&lt;/a&gt;&amp;nbsp;των&amp;nbsp;διεργασιών&amp;nbsp;που ενημερώνουν τα δεδομένα. Σε ένα μεγάλο σημείο το η υλοποίηση της πολιτικής του concurrency εξαρτάται από τις τεχνολογίες που χρησιμοποιείς, πως μπορούν να βοηθήσουν σε αυτό, και κατά δεύτερο στο πόσο σωστά έχεις κάνει την εκτίμησή σου για&amp;nbsp;το πως&amp;nbsp;θα γίνει η υλοποίηση&amp;nbsp;της πολιτικής ενημέρωσης των δεδομένων&amp;nbsp;στην εφαρμογή σου.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Παράδειγμα: Αν δύο&amp;nbsp;διαφορετικοί&amp;nbsp;χρήστες, βλέπουν την ίδια καρτέλα και ο ένας αλλάξει τα δεδομένα και θέλουμε ο άλλος να δει την αλλαγή, τι πραγματικά συμβαίνει:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Αυτός που βλέπει τα δεδομένα θα δει τις αλλαγές όταν&lt;/li&gt;&lt;ul&gt;&lt;li&gt;είτε ο client του κάνει ένα poll και καταλάβει ότι άλλαξαν τα δεδομένα (disconnected enviroment),&amp;nbsp;&lt;/li&gt;&lt;li&gt;είτε λάβει ένα message από το server ότι άλλαξαν τα δεδομένα (always connected enviroment).&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Στην πρώτη&amp;nbsp;περίπτωση,&amp;nbsp;ο client σε τακτά χρονικά διαστήματα κάνει poll στον server για να δει αν υπάρχουν αλλαγές. Καταλαβαίνουμε ότι ένα μεγάλο ποσοστό των polls θα είναι άχρηστο, μιας και δεν θα έχουμε τόσες πολλές αλλαγές, και ταυτόχρονα θα&amp;nbsp;επιβαρύνεται&amp;nbsp;ο server κάθε φορά που θα πρέπει να απαντάει σε αυτά τα polls.&lt;/li&gt;&lt;li&gt;Στην δεύτερη περίπτωση, ο client έχει ανοιχτή σύνδεση στον server, και αναμένει ένα message. Σε αυτή την περίπτωση, o client θα περιμένει τον περισσότερο καιρό χωρίς να λαμβάνει τίποτα, απλά καταναλώνοντας resources από τον server.&lt;/li&gt;&lt;li&gt;Και στις δύο περιπτώσεις, σε περιβάλλοντα που υπάρχει μεγάλος φόρτος "πραγματικής εργασίας", ο φόρτος που προσδίδεται είτε από τον client με τα συνεχή polls στον server, είτε τα resources που καταναλώνονται στον server με την συνεχή σύνδεση τους με τον client,&amp;nbsp;συνεισφέρουν&amp;nbsp;αρνητικά&amp;nbsp;στις επιδόσεις του συστήματος.&lt;/li&gt;&lt;li&gt;Δεν υπάρχει "χρυσός κανόνας" για το πως θα πρέπει να υλοποιηθεί η πολιτική - είναι αυτό που είπα παραπάνω ότι όλα&amp;nbsp;εξαρτιούνται&amp;nbsp;από το "πόσο σωστά έχεις κάνει την εκτίμησή σου". Η&amp;nbsp;αλήθεια&amp;nbsp;είναι ότι το σύνηθες είναι η υλοποίηση να είναι μέρος ή/και&amp;nbsp;συνδυασμός&amp;nbsp;σημείων από τις δύο παραπάνω περιπτώσεις.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Η ανάπτυξη του interface είναι το επόμενο θέμα:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Αν υποθέσουμε ότι θέλουμε να δημιουργήσουμε το interface με τους design-time wizards που έρχονται με το Visual Studio, ενώ η ανάπτυξη των απαραίτητων business objects, είτε για χρήση με ASP.NET WebForms&amp;nbsp;είτε για ASP.NET&amp;nbsp;MVC, έχουν&amp;nbsp;πολύ πιο εύκολη/straitforward ανάπτυξη, δεν είναι αντίστοιχα εύκολη η ανάπτυξη για τα WinForms/WPF.&lt;/li&gt;&lt;li&gt;Για το web είναι αρκετό τα business objects να έχουν decoration DataObject και οι μέθοδοι που θα χρησιμοποιηθούν από το wizard να είναι decorated με DataObjectMethod.&lt;/li&gt;&lt;li&gt;Τα πράγματα είναι πολύ διαφορετικά για τα WinForms και WPF Apps, πρέπει τα business objects να υλοποιούν τουλάχιστον το IBindableList interface για να μπορούν να χρησιμοποιηθούν από τους wizards. Αν θα πρέπει να υπάρξει validation στο UI, και&amp;nbsp;Sorting, τότε ο κώδικας που πρέπει να γραφτεί παραπάνω είναι αρκετός.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Τα WPF Apps εκτός από το objects που προέρχονται από το&amp;nbsp;IBindableList,&amp;nbsp;μπορούν να χρησιμοποιήσουν και Collections που προέρχονται από το ObservableCollection&amp;lt;T&amp;gt;.&lt;/li&gt;&lt;li&gt;Ο σύνηθες δρόμος εδώ, είναι να μην φτιάχνονται τόσο πολύπλοκα business object. Η απουσία αυτής της υλοποίησης, αντιπαρέρχεται από υλοποίηση UI που περιέχουν κώδικα, τουλάχιστον για το data binding, αλλά πολλές φορές και για το validation.&lt;/li&gt;&lt;li&gt;Από τα Frameworks που θα σε βοηθήσουν να φτιάξεις δικά σου business classes για να μπορούν να κάνουν bind σε WinForm/WPF controls είναι το &lt;a href="http://www.lhotka.net/cslanet/"&gt;CSLA.NET&lt;/a&gt;. Δεν απαιτείται να κάνεις όλη την υλοποίηση που προτείνει το CSLA.NET για την εφαρμογή σου, αρκεί να πάρεις τις υλοποιήσεις των abstract business classes που έχει και υλοποιούν σε ένα μεγάλο βαθμό τα αναγκαία interfaces για databinding, και να τα χρησιμοποιήσεις στις business classes των εφαρμογών σου.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;George J.&lt;br&gt;&lt;br&gt;&lt;/div&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59771.aspx</link><pubDate>Fri, 27 Aug 2010 07:53:47 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59771</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59771.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59771</wfw:commentRss><description>&lt;P&gt;Χμ... Ζόρικα τα πράγματα. Δεν έχω κάτσει να σκεφτώ μια τέτοια υλοποίηση μέχρι τώρα και πιστεύω πως πρόκειται για μία περίπτωση που πρέπει να απασχολήσει σοβαρά&amp;nbsp;το τμήμα&amp;nbsp;R&amp;amp;D μιας εταιρίας προτού περάσει σε production code. Αν κάποιος(-οι) το έχουν ήδη κάνει,&amp;nbsp;μάλλον δεν πρόκειται να αναφέρουν το πως το πέτυχαν, μιας και πρόκειται για ένα χαρακτηριστικό που τους δίνει σοβαρό ανταγωνιστικό πλεονέκτημα στην αγορά (τρομερά ευέλικτο UI).&amp;nbsp;Παρόλ' αυτά, νομίζω ότι μπορεί να υλοποιηθεί και θα προσπαθήσω να περιγράψω σε γενικές γραμμές την προσέγγιση που θεωρώ ότι είναι η σωστή.&lt;/P&gt;
&lt;P&gt;Κατ' αρχήν, ξεχνάς την "τυπική" μεθοδολογία για το binding.&amp;nbsp;Αυτό που χρειάζεσαι είναι ένα componet που θα "λειτουργεί"&amp;nbsp;κάτω από&amp;nbsp;το presentation (φόρμες). &lt;STRONG&gt;Όλα τα data&lt;/STRONG&gt; &lt;STRONG&gt;θα φορτώνονται εκεί&lt;/STRONG&gt; και, ανάλογα με τη φόρμα που ζητάει ο χρήστης, θα "φτιάχνει" &lt;STRONG&gt;το κατάλληλο&lt;/STRONG&gt; &lt;STRONG&gt;view&lt;/STRONG&gt;. Για παράδειγμα, ο χρήστης ζητάει τους οδηγούς. Το component θα φορτώνει τους υπαλλήλους που είναι οδηγοί, θα τους βάζει σε ένα view, θα δημιουργεί το binding και θα το περνάει στη φόρμα&amp;nbsp;που θα υπάρχει το&amp;nbsp;ανάλογο grid. Στη συνέχεια ο χρήστης ζητάει τους μηχανικούς (υπάλληλοι και αυτοί). Το component θα φορτώνει στο &lt;STRONG&gt;ίδιο&lt;/STRONG&gt; context τους μηχανικούς, θα δημιουργεί το view και θα το "οδηγεί" στην κατάλληλη φόρμα και το αντίστοιχο grid, όπως και προηγουμένως. Στη συνέχεια, ο χρήστης ζητάει τα details για έναν οδηγό. Μέσω deffered loading το component θα φορτώνει τα details, θα δημιουργεί το κατάλληλο view&amp;nbsp;και θα το "σπρώξει" στην detail&amp;nbsp;φόρμα των οδηγών. Όλο το data manipulation, ο μηχανισμός binding με το datasource, η διαχείριση των events για τα property changes, το validation κ.λπ.&amp;nbsp;θα&amp;nbsp;γίνονται από το&amp;nbsp;component, όπως&amp;nbsp;και το persistence&amp;nbsp;φυσικά.&amp;nbsp;Οι φόρμες σου θα δώσουν στην έκφραση "&lt;EM&gt;χαζές&lt;/EM&gt;" εντελώς νέο νόημα. Πράγμα λογικό, τη στιγμή που ανοίγεις πολλαπλά instances και θέλεις έναν μαέστρο να συγχρονίζει τα πάντα (το component δηλαδή). Βεβαίως και δεν πρέπει να ξεχάσεις να υλοποίησεις ένα μηχανισμό dispose, όταν δεν χρειάζεσαι πια τα δεδομένα.&lt;/P&gt;
&lt;P&gt;Το ωραίο στο άφησα για το τέλος. Επειδή θέλεις να δουλέψεις με entities και&amp;nbsp;όχι με datatables και dataviews, νομίζω ότι η υλοποίηση θα είναι πιο εύκολη σε WPF απ' ό,τι σε WinForms. Εκεί έχεις δύο πολύ δυνατά όπλα που λέγονται &lt;A href="http://msdn.microsoft.com/en-us/library/ms668604(VS.90).aspx"&gt;ObservableCollection(T)&lt;/A&gt; και &lt;A href="http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(VS.90).aspx"&gt;CollectionViewSource&lt;/A&gt;. Βέβαια, όποιος έχει κάτι άλλο στο μυαλό του που νομίζει ότι είναι σε πιο σωστό δρόμο, περιμένω να το post-άρει μιας και θεωρώ ότι το θέμα προσφέρεται για πολλή συζήτηση.&lt;/P&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59769.aspx</link><pubDate>Fri, 27 Aug 2010 05:43:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59769</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59769.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59769</wfw:commentRss><description>&lt;P&gt;Συγνώμη είχα γράψει ότι είχα γράψει προηγουμένως και αναφερόμουν στην προσέγγιση των Profiles που ανέφερε ο George J. Δεν το είχα ξανακούσει και ήθελα μία περιγραφή.&lt;/P&gt;
&lt;P&gt;Όσο για το πρόγραμμα, ναι έχεις πιάσει ακριβώς το UI πως το θέλουν να είναι. Αλλά όχι μόνο για προσθήκες αλλά και για μεταβολές.&amp;nbsp;Επίσης επειδή δεν το ανέφερες θα ήθελα να πως μία φορά ακόμα πως υπάρχουν και διαφορετικά πεδία που μπορεί να "κολλήσουν" επάνω στο ίδιο entity ανάλογα το τμήμα στο οποίο εργάζεται. Δεν ξέρω αν θα μπορούσα να το φτιάξω με DataTables, έχω να τα χρησιμοποιήσω χρόνια αλλά από ότι θυμάμαι σε ένα τέτοιο UI ίσως να είναι ακόμα πιο δύσκολη υλοποίηση αν προσθέσουμε και το Business Logic που θα πρέπει να υπάρχει. Από εκεί και πέρα αν έχεις διαφορετική άποψη και μπορείς να μου πεις την σκέψη σου θέλω να σε ακούσω. &lt;/P&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59766.aspx</link><pubDate>Thu, 26 Aug 2010 23:46:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59766</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59766.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59766</wfw:commentRss><description>&lt;P&gt;&lt;U&gt;Δύο ερωτήσεις&lt;/U&gt;:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;) Οι απαιτήσεις είναι, α) να ανοίγεις ταυτόχρονα&amp;nbsp;&lt;STRONG&gt;όσα grids θέλεις&lt;/STRONG&gt;, ανάλογα με την κατηγορία των εργαζομένων που εξετάζεις, β) από το&amp;nbsp;κάθε grid να μπορείς ν'&amp;nbsp;ανοίγεις &lt;STRONG&gt;όσες&lt;/STRONG&gt; &lt;STRONG&gt;φόρμες&lt;/STRONG&gt; θέλεις με τα details για τον κάθε εργαζόμενο, γ)&lt;STRONG&gt; &lt;/STRONG&gt;όλα να είναι &lt;STRONG&gt;editable&lt;/STRONG&gt; και &lt;STRONG&gt;από παντού&lt;/STRONG&gt; να μπορείς να κάνεις &lt;STRONG&gt;update&lt;/STRONG&gt; &lt;STRONG&gt;από παντού&lt;/STRONG&gt; και δ) να ενημερώνονται &lt;STRONG&gt;όλα&lt;/STRONG&gt; (grids, φόρμες κ.λπ.) για τις αλλαγές που συμβαίνουν στο ίδιο entity είτε αφορούν editing είτε validation είτε persistence (μεταβολές στο entity state)&amp;nbsp;κ.λπ., κ.λπ.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2&lt;/STRONG&gt;) Συνήθως όταν μιλάμε για fast entry, μιλάμε για προσθήκες και όχι για μεταβολές σε υπάρχουσες εγγραφές. Το fast entry το θέλεις μόνο για additions ή δεν το κατάλαβα σωστά;&lt;/P&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59763.aspx</link><pubDate>Thu, 26 Aug 2010 22:56:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59763</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59763.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59763</wfw:commentRss><description>&lt;P&gt;Ομολογώ πως δεν καταλαίνω τι θέλεις να μου πεις. Το έχασα... Οπότε αν δε σου κάνει κόπο και έχεις τον χρόνο γράψε μου σχετικά. Θα ήθελα όμως να σε πληροφορήσω πως αυτό που έχεις κατά νου θέλω να είναι Bindable και να έχει properties. Δηλαδή αν είναι κάποιο custom Hashtable (propName, Value) που χτίζεται στο Runtime δεν θα μπορώ να το κάνω Bind στο Grid για μαζική καταχώρηση.&lt;/P&gt;
&lt;P&gt;Αν θέλεις να φέρεις το παράδειγμα στα μέτρα μου να σου περιγράψω λίγο το πρόβλημα. Μία εταιρεία έχει δύο τμήματα ή πόστα. Οδηγοί και μηχανικοί ας πούμε. Ένας υπάλληλος μπορεί να είναι και οδηγός αλλά και μηχανικός. Δηλαδή μπορεί να δουλεύει και στα δύο τμήματα ή μόνο στο ένα. Η εφαρμογή ανοίγει και ο χρήστης επιλέγει να ανοίξει το τμήμα οδηγοί οπότε εκεί εμφανίζεται ένα grid με όλους τους υπαλλήλους. Κανείς όμως δεν εμποδίζει τον χρήστη να ανοίξει και το άλλο τμήμα των μηχανικών. Οπότε αν έχουμε υπαλλήλους που να δουλέυουν και στα δύο τμήματα τότε αυτοί θα εμφανιστούν και στα δύο grid. Τώρα το κάθε τμήμα για να βγει η μισθοδοσία έχει εκτός από τα στοιχεία του υπαλλήλου τα οποία είναι κοινά σε όποιο τμήμα και να ανήκει π.χ οικογενειακή κατάσταση, αριθμός ανήλικων παιδιών κτλ υπάρχουν και κάποια άλλα πεδία τα οποία είναι συγκεκριμένα για το τμήμα στο οποίο ανήκει. Συνήθως αυτά θα ενημερώνει πιο πολύ στην μαζική καταχώρηση. &lt;/P&gt;
&lt;P&gt;Οπότε το πρόβλημα όπως καταλαβαίνει είναι πως όταν ο χρήστης&amp;nbsp;κάνει μία αλλαγή σε κάποιο property&amp;nbsp;κάποιου υπαλλήλου ο οποίος είναι και στα δύο τμήματα&amp;nbsp;π.χ αριθμός παιδιών και ο χρήστης έχεις ανοίξει και τα δύο τμήματα θα ήθελα η αλλαγή αυτή να φαίνεται και στα δύο grid. &lt;/P&gt;
&lt;P&gt;Μπορεί η αλλαγή αυτή να σου φαίνεται λίγο παρατραβηγμένη αλλά σε μία εταιρεία με γύρω στα 1000 προσωπικό πάντα σχεδόν κάθε μήνα κάτι θα γίνει είτε για κάποιο επίδομα ασθένειας είτε για αλλαγή τραπεζικού λογαριασμού μισθοδοσίας είτε για ότι άλλο. Δυστυχώς είναι συχνό φαινόμενο...&lt;/P&gt;
&lt;P&gt;Αν είναι δύσκολο να μου δείξεις το παράδειγμα επάνω σε αυτά που γράφω δεν πειράζει, σκέψου ένα δικό σου και θα κάνω την μετατροπή στα μέτρα μου για να δω πως κολλάει.&lt;/P&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59750.aspx</link><pubDate>Thu, 26 Aug 2010 03:34:30 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59750</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59750.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59750</wfw:commentRss><description>Καλό το BindingList&amp;lt;T&amp;gt;, αλλά είναι τόσο λίγο!! Πρέπει να κάνεις implement τόσα interfaces για να του δώσεις λειτουργικότητα που τα datatables έχουν out of the box!! (sorting, searching, editing όταν sorted=true κλ.π.). Επίσης, μέσω των datarelations μπορείς να "επιβάλεις" referencial integrity και να χρησιμοποιήσεις keys για uniqueness. Ο Παράδεισος του UI!! Αλλά, ποιος είπε ότι πρέπει ντε και καλά να τα χρησιμοποιήσεις για να επικοινωνήσεις με τη βάση; Εγώ αναφέρθηκα σε απλό&amp;nbsp;FAST&amp;nbsp;data entry. Αν θέλουμε δε χρησιμοποιούμε&amp;nbsp;ούτε dataadapters, ούτε tableadapters.&amp;nbsp;Τα υπόλοιπα, ας τα αναλάβει το context.</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59749.aspx</link><pubDate>Thu, 26 Aug 2010 03:15:30 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59749</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59749.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59749</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Markos:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;
&lt;P&gt;Όποτε θέλω να έχω fast entry forms σε related data με μορφή πίνακα, χρησιμοποιώ datasets. Μπορεί να μην σου ακούγεται ελκυστικό, αλλά έχε το κάπου στο πίσω μέρος του μυαλού σου, αν τα πράγματα σκουρύνουν πολύ.&lt;/P&gt;
&lt;P&gt;...&lt;/P&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;/P&gt;
&lt;P&gt;Είναι μεγάλη αλήθεια ότι τα Dataset είναι &lt;U&gt;πάρα πολύ ελκυστικά&lt;/U&gt; για την γρήγορη δημιουργία presentation layer, λόγω των ευκολιών που παρέχουν design-time, ιδίως όταν μιλάμε για WinForms. Προσωπικά, δεν έχω κάνει υλοποίηση εφαρμογής, από την αρχή ως στο τέλος, σε WinForms, από όταν έχω ξεκινήσει να ασχολούμαι με .NET.&lt;/P&gt;
&lt;P&gt;Παρόλα αυτά, μπορείς να φτιάξεις στο δικό σου Business Layer classes που να κάνουν την ίδια δουλειά, υλοποιώντας το &lt;A href="http://msdn.microsoft.com/en-us/library/ms132679.aspx"&gt;BindableList&amp;lt;T&amp;gt;&lt;/A&gt;. Υπάρχουν άρθρα που περιγράφουν μια τέτοια διαδικασία, όπως &lt;A href="http://msdn.microsoft.com/en-us/magazine/cc163745.aspx"&gt;αυτό του Paul Balard&lt;/A&gt;&amp;nbsp;- σίγουρα θα βρεις σχετικά άρθρα του Rockford Lhotka, που το όνομά του είναι "κόκκινο πανί" για ορισμένος μέσα στο forum. &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59748.aspx</link><pubDate>Thu, 26 Aug 2010 02:56:43 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59748</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59748.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59748</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;infoCENTER:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Θα ήθελα να μου δώσεις παραπάνω πληροφορίες για τα profiles σε παρακαλώ. Αν μπορείς επίσης θα ήθελα να μου υποδείξεις και κάποιο site που να περιγράφει την προσέγγιση που περιγράφεις.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Tα profiles δεν είναι κάποιο αρχιτεκτονικό pattern, ή το profile του membership που περιέχει το&amp;nbsp;.NET Framework&amp;nbsp;- τον όρο profile τον χρησιμοποίησα για να καταλάβεις ότι κάθε κομμάτι έχει ξεχωριστά δεδομένα, σε σχέση με το βασικό σου entity, employee. Ουσιαστικά είναι de-normalization ενός πίνακα που θα είχε τα δεδομένα του employee σε συνδιασμό με τα δεδομένα που απαιτούνται για κάθε κομμάτι της εφαρμογής. Τουτέστιν να σπάσεις ένα πίνακα με πολλές στήλες σε πολλούς, που έχουν σχέση 1-1 με τον αρχικό (employee).&lt;/P&gt;
&lt;P&gt;Δεν ξέρω αν καταλαβαίνεις τι ακριβώς περιγράφω. Πες μου αν δεν είναι κατανοητό σε εσένα...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59746.aspx</link><pubDate>Thu, 26 Aug 2010 02:11:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59746</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59746.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59746</wfw:commentRss><description>&lt;P&gt;Όποτε θέλω να έχω fast entry forms σε related data με μορφή πίνακα, χρησιμοποιώ datasets. Μπορεί να μην σου ακούγεται ελκυστικό, αλλά έχε το κάπου στο πίσω μέρος του μυαλού σου, αν τα πράγματα σκουρύνουν πολύ.&lt;/P&gt;
&lt;P&gt;Όσον αφορά τα composite entities, αφού θέλεις να μετατρέψεις μία σχέση "is a" σε "has a", έχε μόνο ένα Employee entity, στο οποίο θα κρατάς τα κοινά στοιχεία όλων των υπαλλήλων, και δημούργησε Activities. Π.χ. ο οδηγός είναι Employee με Activity "Driver". Όλα τα&amp;nbsp;Activities θα πρέπει να κληρονομούν από ένα BaseActivity&amp;nbsp;για να μπορείς να τα διαχειριστείς σε ένα collection μέσα στο κάθε Employee object. Βεβαίως, πρέπει να προνοήσεις&amp;nbsp;ώστε να υπάρχουν μέθοδοι για το&amp;nbsp;loading, adding, deleting κ.λπ.&amp;nbsp;των activities ενός Employee,&amp;nbsp;για να ελέγχεις&amp;nbsp;τα relationships.&amp;nbsp;Τέλος, για να μπορέσεις να ανοίγεις πολλαπλές φόρμες με το ίδιο entity, θα πρέπει να δημιουργήσεις κάποιο "ενδιάμεσο presenter entity" που θα περικλείει το entity,&amp;nbsp; ένα bindingsource για τα properties του Employee και από ένα bindingsource για κάθε activity. Δηλαδή, δεν θα κάνεις το binding του object απ' ευθείας σε control ή σε φόρμα, αλλά όλα τα instances των controls ή των φορμών που θα αφορούν στο ίδιο object, θα κάνουν binding με&amp;nbsp;τα bindingsources του κοινού presenter entity. Δεν το έχω δοκιμάσει, just a thought...&lt;/P&gt;</description></item><item><title>Απ: Composite Entities</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59745.aspx</link><pubDate>Thu, 26 Aug 2010 01:50:28 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59745</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59745.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=59745</wfw:commentRss><description>Θα ήθελα να μου δώσεις παραπάνω πληροφορίες για τα profiles σε παρακαλώ. Αν μπορείς επίσης θα ήθελα να μου υποδείξεις και κάποιο site που να περιγράφει την προσέγγιση που περιγράφεις.</description></item></channel></rss>