<?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>Re: data utils sample project download</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3231.aspx</link><pubDate>Thu, 30 Jun 2005 19:21:42 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3231</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3231.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=3231</wfw:commentRss><description>Καλημέρα. Μόλις ανέβασα ένα sample project του API, &lt;a target="_blank" title="http://www.anjelinio.com" href="http://www.anjelinio.com"&gt;εδώ&lt;/a&gt;.&lt;br /&gt;</description></item><item><title>Re: data utils download &amp; μικρό tutorial</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3208.aspx</link><pubDate>Wed, 29 Jun 2005 22:48:48 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3208</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3208.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=3208</wfw:commentRss><description>Ακριβώς το αντίθετο συμβαίνει. Επειδή ΔΕΝ διάλεξα το Application Configuration σαν storage για&amp;nbsp; τα paths, αναγκάστηκα να κάνω τα Singletons .. semi-Singletons &lt;img src="/forums/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;br /&gt; &lt;br /&gt; Βασικά, ήθελα να μπορώ να κάνω init απο ένα οποιοδήποτε xml stream, οπότε ... ήταν pointless να κρατήσω οποιοδήποτε&amp;nbsp; value στο app. config, τη στιγμή που δε θέλω να ξέρω τι είδους stream διαβάζω ... &lt;br /&gt; &lt;br /&gt;&amp;nbsp;Σύντομα θα ανεβάσω και κάποιο(α) sample project(s), αυτό που έχω ήδη δυστυχώς ήταν internal, και έχει ακόμη πράγματα που θα με βάραγαν απ'την εταιρία αν ανακάλυπταν οτι τα δείχνω απ'έξω &lt;img src="/forums/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;br /&gt; &lt;br /&gt; Αυτός είναι και ο λόγος που δεν υπάρχει το source μέσα στο .rar, αλλά σκοπεύω να ψήσω τον κόσμο εδώ οτι τελικά .. είναι καλό publicity να δίνεις κώδικα στον κόσμο free. Μόλις τα καταφέρω, θα ανεβάσω όλον τον κώδικα στο site.&lt;br /&gt;</description></item><item><title>Re: data utils download &amp; μικρό tutorial</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3206.aspx</link><pubDate>Wed, 29 Jun 2005 22:38:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3206</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3206.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=3206</wfw:commentRss><description>&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #efefef"&gt;Έριξα μια ματιά στο walkthrough σου... Το διάβασα στα πεταχτά και δεν έχω προλάβει να παίξω με τα dlls αλλά μου έκανε εντύπωση αυτό που έγραψες για τα singletons που δεν είναι singletons και ότι οφείλεται στο Application Configuration που διάλεξες ως init storage.&amp;nbsp;Μιας και δεν δίνεις παραπάνω πληροφορίες, έχει να κάνει το πρόβλημα με το ότι το App.config γίνεται p*** κατά το loading του assembly;&lt;br /&gt;Επίσης, αν μας έδεινες και ένα μικρό project για demo, μιας και μπήκες στον κόπο να γράψεις όλο αυτό το walkthrough, θα ήταν καλύτερα... Να τολμήσω να ζητήσω να μας έδειχνες και λίγο κώδικα από τα DLLs, ας πούμε τα highlights; &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;</description></item><item><title>data utils download &amp; μικρό tutorial</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3190.aspx</link><pubDate>Wed, 29 Jun 2005 19:31:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3190</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3190.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=3190</wfw:commentRss><description>Καλημέρα παιδιά. Όπως είπα, μόλις έγραψα ένα μικρό (πολύ μικρό) walkthrough του API που περιέγραψα στα παραπάνω posts, κι έβαλα τα dlls σε ένα .rar για download. &lt;br /&gt; &lt;br /&gt; Αν θέλετε, μπορείτε να τα βρείτε &lt;a target="_blank" title="http://www.handmade.gr/angel/?p=26" href="http://www.handmade.gr/angel/?p=26"&gt;εδώ&lt;/a&gt;&lt;br /&gt;</description></item><item><title>Re: Μια άποψη για ένα data layer ...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3120.aspx</link><pubDate>Mon, 27 Jun 2005 17:29:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3120</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3120.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=3120</wfw:commentRss><description>Καλημέρα παιδιά, καλή εβδομάδα, ελπίζω να σας βρήκε όσο μαυρισμένο με βρίσκει κι εμένα &lt;img src="/forums/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;br /&gt; &lt;br /&gt; Νομίζω οτι κάπου δεν πέρασα καλά τους στόχους μου. Ο βασικός στόχος&amp;nbsp; είναι να κερδίσω (εγώ και η ομάδα) χρόνο υλοποίησης, χωρίς να θυσιάσω performance και "ποιότητα" κώδικα. Επίσης, μεγάλο μέρος όλης αυτής της ιστορίας έχει να κάνει με ευελιξία και εύκολη διαχείρηση. &lt;br /&gt; &lt;br /&gt; Οπότε, απαντώ σε μερικά θέματα που αναφέρθηκαν στα 2 τελευταία posts. &lt;br /&gt; &lt;br /&gt; Ναί, πρέπει να περνάς το object[] σε κάθε κλήση, αλλά με τον "παραδοσιακό" τρόπο με Commands, πάλι δεν περνάς παραμέτρους, και μάλιστα με πολύ περισσότερες γραμμές κώδικα; (&lt;i&gt;Αυtό ισχύει και για το Data Access Block φυσικά ...&lt;/i&gt; )&lt;br /&gt; &lt;br /&gt; Το xml file δεν είναι και τόσο μεγάλο liability, υπάρχουν τρόποι να διασφαλίσεις το integrity του, απο&amp;nbsp; τα&amp;nbsp; permissions στα Windows ως signing το αρχείο με ένα digital signature, κι όλα τα μεταξύ των 2 ... όταν πλέον μιλάς για αλλαγές απο κάποιον ο οποίος έχει&amp;nbsp; admin access&amp;nbsp; στο σύστημα, είναι&amp;nbsp; περιττό να πείραξει&amp;nbsp; καν τα config files μου .. he owns me!!! &lt;img src="/forums/emoticons/emotion-2.gif" alt="Big Smile" /&gt; ( &lt;i&gt;καλά .. βαριά κουβέντα είπα, αλλά καταλαβαίνετε το πνεύμα του αστείου ..&lt;/i&gt; )&lt;br /&gt; &lt;br /&gt; Ερχόμαι απ'τη μεριά της Java στο .NET, οπότε ναι, έχω μια εκτίμηση στα O/R εργαλεία. Αλλά εκτός κι αν χρειάζεσαι το Object Orientation (&lt;i&gt;υπάρχει κάποιο business logic κάποιας σοβαρότητας&lt;/i&gt; ) ... είναι μάταιο, και φτάνει να γίνεται overhead.&amp;nbsp; Σκέψου την περίπτωση όπου ένα query θα μου γυρίσει 12000 value objects *-} ... εδώ θα πείς "&lt;i&gt;οκ, σε αυτήν την περίπτωση μη χρησιμοποιήσεις τον O/R mapper&lt;/i&gt;" - αλλά τότε έχω 2 τρόπους να μιλώ στα data sources μου, χάνω την ομοιογένεια του κώδικά μου, κτλ κτλ&lt;br /&gt; &lt;br /&gt; Η περίπτωση του custom data layer κάτω απο COM+ ... είναι ο λόγος για τον οποίο έγραψα αυτό το block &lt;img src="/forums/emoticons/emotion-2.gif" alt="Big Smile" /&gt; ... για να μη χρειαστεί ποτέ ξανά για ν'αλλάξω μια παράμετρο να κάνω rebuild &amp;amp; redeploy, στο δικό μου μηχάνημα καί στο live server. 1 λεπτό να γράψεις την αλλαγή, και 40 λεπτά να την εγκαταστήσεις ... έχω ένα COM+ wrapper τριγύρω απ'το API μου, κι έχω τα best of both worlds. &lt;br /&gt; &lt;br /&gt; Τέλος, το API δε γυρίζει μόνο data sets ... θα ήταν πολύ .. gay .. εκ μέρους μου πιστέυω &lt;img src="/forums/emoticons/emotion-2.gif" alt="Big Smile" /&gt; Οπότε, γυρίζει datasets, readers, xml κι ένα δικό μου type, το ResultSet, το οποίο μοιάζει περισσότερο με το παλιό Recordset του ADO, και κάνει paging χρησιμοποιώντας εσωτερικά readers. &lt;br /&gt; &lt;br /&gt; Τι άλλο, τι άλλο ... ε, σα "σούμα" έχω όλα τα παραπάνω, πολύ λιγότερο κώδικα, caching, paging , parameter validation ... δε νομίζω οτι θα τ' άλλαζα εύκολα όλα αυτά για το data access block, σίγουρα όχι για ένα custom COM+ layer με Commands κτλ κτλ, και μόνο αν χρειάζεται απόλυτα για έναν O/R mapper σαν το NHibrnate. &lt;br /&gt; &lt;br /&gt; Σε λίγες μέρες θα βγάλω το dll κι ένα sample project στα downloads&amp;nbsp; αν μπορώ, για να πάρετε και μια γεύση απο πρώτο χέρι &lt;img src="/forums/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br /&gt; &lt;br /&gt; Πολύ καλή εβδομάδα μας &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;</description></item><item><title>Re: Μια άποψη για ένα data layer ...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3091.aspx</link><pubDate>Sat, 25 Jun 2005 19:59:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3091</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3091.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=3091</wfw:commentRss><description>&lt;font face="Georgia" size="2"&gt;Εκτός από την αυτά που είπε ο Άρης, και είναι η πλήρες ανάπτυξη των δυνατοτήτων που υπάρχουν κάτω από .NET, ίσως θα μπορούσες να δοκιμάσεις κάτι πιο απλό:&lt;br /&gt;&lt;br /&gt;To &lt;/font&gt;&lt;a target="_blank" title="http://msdn.microsoft.com/library/?url=/library/en-us/sqlxml3/htm/dotnet_0jck.asp?frame=true" href="http://msdn.microsoft.com/library/?url=/library/en-us/sqlxml3/htm/dotnet_0jck.asp?frame=true"&gt;&lt;font face="Georgia" size="2"&gt;SQLXML .NET Support&lt;/font&gt;&lt;/a&gt;&lt;font face="Georgia" size="2"&gt;. Δεν ξέρω έτσι που τα περιέγραψες, ήταν σαν να μου έλεγες για αυτό. Τα diffgrams είναι XML αρχεία που μπορούν να κάνουν SELECT, UPDATE, DELETE, INSERT, να αποθηκευτούν κεντρικά κάτω από ένα directory του IIS και να τα χρησιμοποιούνται. Μπορούν να&amp;nbsp;δέχονται παραμέτρους, να χρησιμοποιούν stored procedures... Μπορούν να γίνουν SELECT με βάση ένα XSD schema...&lt;br /&gt;&lt;br /&gt;Υπάρχει υποστήριξη από το .NET Framework, και δεν είναι τόσο φοβερό στην χρήση...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;George J.&lt;br /&gt;&lt;/font&gt;</description></item><item><title>Re: Μια άποψη για ένα data layer ...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3084.aspx</link><pubDate>Sat, 25 Jun 2005 05:23:43 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3084</guid><dc:creator>Aris</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3084.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=3084</wfw:commentRss><description>&lt;p&gt;Όπως φαίνεται (με διορθώνεις εάν κάνω λάθος), οι στόχοι σου είναι:&lt;br /&gt;- να περιγράψεις το σύνολο των εργασιών στην βάση δεδομένων με ένα σύνολο δηλώσεων (σε XML), και να παράγεις δυναμικά (κατά τον χρόνο εκτέλεσης) τα ακριβή SQL statements που χρειάζεσαι, έχοντας σταθερό τον κώδικα αυτό (δηλαδή τον κώδικα που "εκτελεί" τις δηλώσεις). Αυτό οδηγεί στην ανάγκη να υπάρχει το object[] που περνάς σαν παράμετρο στο παράδειγμα που δίνεις.&lt;br /&gt;- να έχεις την δυνατότητα αλλαγής βάσης δεδομένων, αλλάζοντας τις δηλώσεις (στο σημείο περί αλλαγής datasource provider, είσαι κάπως ασαφής. Ο μηχανισμός, υποθέτω είναι επεκτάσιμος. Δημιουργείς όμως ODBC driver για τις άλλες πηγές δεδομένων, ώστε να έχεις SQL σύνταξη;&lt;br /&gt;- να συγκεντρώσεις όλο τον κώδικα πρόσβασης στα δεδομένα σε ένα σημείο (ουσιαστικά ένα code.dll και ένα declarations.xml). Όμως, το xml αρχείο συνοδεύει την εφαρμογή και είναι αλλοιώσιμο, κάτι που αποτελεί (κατ' αρχήν) πρόβλημα ασφάλειας.&lt;br /&gt;&lt;br /&gt;Κατά την γνώμη μου, θα πρέπει να δείς:&lt;br /&gt;- Το &lt;a target="_blank" title="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/daab.asp" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/daab.asp"&gt;Data Access Application Block&lt;/a&gt;. Συνεργάζεται με διάφορες σχεσιακές βάσεις δεδομένων και διευκολύνει την χρήση SQL statements και stored procedures&lt;br /&gt;- Εργαλεία Object/Relational Mapping (ORM). Δες &lt;a target="_blank" title="http://www.theserverside.net/news/thread.tss?thread_id=29914" href="http://www.theserverside.net/news/thread.tss?thread_id=29914"&gt;αυτή την συζήτηση&lt;/a&gt; στο &lt;em&gt;www.theserverside.net&lt;/em&gt; για μιά καλή λίστα. Αυτά σου επιτρέπει μιά αντικειμενοστραφή θεώρηση των δεδομένων&lt;br /&gt;&lt;br /&gt;Επίσης, θα πρότεινα να εξετάσεις την περίπτωση να γράφεις ένα ειδικό data access layer component ανά εφαρμογή.&amp;nbsp;&lt;br /&gt;Αυτό θα μπορούσε να υλοποιηθεί σαν ServicedComponent (εάν θέλεις να μπεί στο COM+) ή σαν MarshalByRefComponent/ContextBoundObject και να εμφανίζεται (μέσω .Net remoting) από ένα windows service.&lt;br /&gt;&lt;br /&gt;Στην περίπτωση αυτή, δεν είσαι καν υποχρεωμένος να επιστρέφεις datasets (αλλά απλούστερες δομές [DataTransferObjects - DTOs] που είναι σαφώς ελαφρύτερα. Έχεις και την δυνατότητα του binary serialization...&lt;br /&gt;Τέλος, εάν η ανάγκη γιά αλλαγή μέσου αποθήκευσης (σχεσιακή βάση, αρχεία XML κλπ) είναι επιτακτική, γράφεις ένα facade, συνδυασμένο με ένα factory...&lt;br /&gt;&lt;br /&gt;Άρης&lt;br /&gt;&lt;/p&gt;</description></item><item><title>Μια άποψη για ένα data layer ...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3075.aspx</link><pubDate>Fri, 24 Jun 2005 20:43:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3075</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3075.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=3075</wfw:commentRss><description>Καλημέρα&amp;nbsp; παιδιά ... &lt;br /&gt; &lt;br /&gt; .. ήρεμη μέρα σήμερα, κι είπα να ζητήσω γνώμες για ένα "τύποις" data layer που έγραψα και χρησιμοποιώ άρδην λίγο καιρό τώρα. &lt;br /&gt; &lt;br /&gt; Η βασική ιδέα είναι η δυνατότητα για declarative definition όλων των data queries, καθώς και των data sources. Aυτά σε xml ( duh ... trendy boy &lt;img src="/forums/emoticons/emotion-2.gif" alt="Big Smile" /&gt; ),&amp;nbsp; σε ένα σχήμα κάπως έτσι:&lt;br /&gt; &lt;br /&gt; &lt;p:colorscheme colors="#ffffe1,#000000,#330033,#330033,#cccc99,#ff0000,#990033,#b2b2b2"&gt; &lt;/p:colorscheme&gt; &lt;div v="" class="O1"&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;&amp;lt;data-action id="SelectCount" type="0" data-source="local" query="select count(*) from ? &lt;/span&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;where ?=0" cached="false" &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;&lt;span style="width: 5.56%;"&gt; &lt;/span&gt;cache-timeout="0"&amp;gt; &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;&lt;span style="width: 5.56%;"&gt; &lt;/span&gt;&amp;lt;params&amp;gt; &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;&lt;span style="width: 16.68%;"&gt; &lt;/span&gt;&amp;lt;param name="tablename" type="String" required="true" /&amp;gt; &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;&lt;span style="width: 14.68%;"&gt; &lt;/span&gt;&amp;lt;param name="deleted_fld_name" type="String" required="true" /&amp;gt;&lt;span style="width: 6.42%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;&lt;span style="width: 2.15%;"&gt; &lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;&lt;span style="width: 5.56%;"&gt; &lt;/span&gt;&amp;lt;/params&amp;gt; &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;&lt;span style="width: 3.47%;"&gt; &lt;/span&gt;&amp;lt;/data-action&amp;gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;br /&gt; ... και ... &lt;br /&gt; &lt;br /&gt; &lt;p:colorscheme colors="#ffffe1,#000000,#330033,#330033,#cccc99,#ff0000,#990033,#b2b2b2"&gt; &lt;/p:colorscheme&gt; &lt;div v="" class="O1"&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 13pt;"&gt;&amp;lt;data-action id="GetSystemAttributes" type="1" data-source="local" &lt;/span&gt;&lt;span style="font-family: "Courier New"; font-size: 13pt;"&gt;query="sp_GetSysAttrValuesByAttrType" cached="true" &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 13pt;"&gt;&lt;span style="width: 5.67%;"&gt; &lt;/span&gt;cache-timeout="3600000"&amp;gt; &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 13pt;"&gt;&lt;span style="width: 5.67%;"&gt; &lt;/span&gt;&amp;lt;params&amp;gt; &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 13pt;"&gt;&lt;span style="width: 14.68%;"&gt; &lt;/span&gt;&amp;lt;param name="@Prefix" type="String" required="true" /&amp;gt;&lt;span style="width: 11.62%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: "Courier New"; font-size: 13pt;"&gt;&lt;span style="width: 2.2%;"&gt; &lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 13pt;"&gt;&lt;span style="width: 5.67%;"&gt; &lt;/span&gt;&amp;lt;/params&amp;gt; &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 13pt;"&gt;&lt;span style="width: 3.54%;"&gt; &lt;/span&gt;&amp;lt;/data-action&amp;gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;br /&gt; Στο programmatic μέρος της ιστορίας, όλα αυτά διαχειρίζονται απο 2 Singletons, ένα για τα data sources κι ένα για τα data queries. Όλο το initialization γίνεται σε 2 γραμμές κώδικα, και κάθε call είναι άλλη μια γραμμή:&lt;br /&gt; &lt;br /&gt; &lt;p:colorscheme colors="#ffffe1,#000000,#330033,#330033,#cccc99,#ff0000,#990033,#b2b2b2"&gt; &lt;/p:colorscheme&gt; &lt;div v="" class="O1"&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;" lang="EN-US"&gt;FileStream io_in_ds = new FileStream(strXmlDSourcesPath, FileMode.Open, &lt;/span&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;" lang="EN-US"&gt;FileAccess.ReadWrite); &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;" lang="EN-US"&gt;&lt;span style="width: 17.27%;"&gt; &lt;/span&gt;DataSourceManager.NewInstance(io_in_ds); &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;" lang="EN-US"&gt; &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;" lang="EN-US"&gt;&lt;span style="width: 15.13%;"&gt; &lt;/span&gt;FileStream io_in = new FileStream(strXmlActionsPath, FileMode.Open, &lt;/span&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;" lang="EN-US"&gt;FileAccess.ReadWrite); &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;" lang="EN-US"&gt;&lt;span style="width: 17.27%;"&gt; &lt;/span&gt;DataActionManager.NewInstance(io_in);&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;br /&gt; &lt;br /&gt; &lt;p:colorscheme colors="#ffffe1,#000000,#330033,#330033,#cccc99,#ff0000,#990033,#b2b2b2"&gt; &lt;/p:colorscheme&gt; &lt;div v="" class="O1"&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;DataSet ds = &lt;/span&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;" lang="EN-US"&gt;DataActionManager.GetInstance()&lt;/span&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;.ExecuteQuery("GetSystemAttributes", &lt;/span&gt;&lt;/div&gt; &lt;div style=""&gt;&lt;span style="font-family: "Courier New"; font-size: 12pt;"&gt;&lt;span style="width: 40.73%;"&gt; &lt;/span&gt;new object[] {pid});&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;br /&gt; &lt;br /&gt; Το βασικό "πλεονέκτημα" που κυνήγησα σε αυτό το approach, ήταν οτι βάζω τον data access κώδικά μου σε ένα και μοναδικό σημείο, κι έτσι κερδίζω στα κάτωθι:&lt;br /&gt; &lt;br /&gt; &amp;nbsp;Όταν ο κώδικας δεν είναι διάσπαρτος και γραμμένος απο διακόσιους ανθρώπους, έχεις πολύ καλύτερο έλεγχο στην ποιότητά του. Μπορείς ας πούμε να διασφαλίσεις οτι τα πάντα θα εκτελεστούν σαν&amp;nbsp; prepared statements,&amp;nbsp; οτι τα&amp;nbsp; connections&amp;nbsp; θα ελευθερωθούν πίσω στο pool,&amp;nbsp; κτλ κτλ&lt;br /&gt; &lt;br /&gt; Έχοντας ένα single entry-point&amp;nbsp; στο data access,&amp;nbsp; μπορείς να κάνεις πράγματα όπως parameter validation &amp;amp; caching πολύ πιο εύκολα.&lt;br /&gt; &lt;br /&gt; Δίνοντας ένα απλό interface στον προγραμματιστή, κι ένα εξ' ίσου απλό xml schema στον DB-guy, χωρίζεις τα responsibilities. Εγώ, σαν κωδικογράφος, δε χρειάζεται να ξέρω πως έχει γράψει ο άλλος τη βάση απο κάτω. Θέλω να ξέρω ένα τύποις interface μόνο, του στύλ "αυτό το query, μ'αυτό το όνομα κι αυτές τις παραμέτρους θα σου επιστρέψει αυτό κι αυτό". Τι με νοιάζει αν έιναι stored procedure, κάποιο direct query ή οτιδήποτε άλλο. Επίσης,&amp;nbsp; σαν DB-guy,&amp;nbsp; κάνω τη δουλειά μου,&amp;nbsp; ορίζω ένα&amp;nbsp; interface στην xml, manage-άρω εγώ τα connection strings ... transparently απ'την υπόλοιπη ομάδα, οι οποίοι .. δε χρειάζεται να ξέρουν &lt;img src="/forums/emoticons/emotion-2.gif" alt="Big Smile" /&gt; ( encapsulation ?? )&lt;br /&gt; &lt;br /&gt; Επίσης, αυτο το declarative επιτρέπει transparent αλλαγές, χωρίς re-compile. Αν αλλάξω data source απο Access σε SQL Server ... δε χρειάζεται να κάνω καμμία αλλαγή σε κώδικα, ούτε καν start-stop τον IIS&amp;nbsp; σε περίπτωση ενός web app. Αν θέλω ν'αλλαξω cache settings .. piece of cake .. τελος πάντων, είναι πολύ πιο ευέλικτο paradigm.&lt;br /&gt; &lt;br /&gt; Τέλος, έχοντας ένα μηχανισμό όπου&amp;nbsp; κάθε&amp;nbsp; data source&amp;nbsp; έχει και&amp;nbsp; έναν&amp;nbsp; provider (ορισμένος&amp;nbsp; στην xml,&amp;nbsp; κλασσικά .. ),&amp;nbsp; μπορώ να χρησιμοποιώ το ίδιο interface για queries&amp;nbsp; σε μη-παραδοσιακές data sources, όπως flat files, xml, το Arc IMS (!!!) κτλ κτλ κτλ ... &lt;br /&gt; &lt;br /&gt; Άντε .. πολλά είπα ε; Αν έχει κάποιος κάποια δεύτερη γνώμη να μοιραστεί ... θα χαρώ πολύ να συζητήσουμε το θέμα &lt;img src="/forums/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br /&gt; &lt;br /&gt; Πολύ καλή μέρα μας&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&lt;br /&gt;</description></item></channel></rss>