<?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>ASP.NET WebForms</title><link>https://www.dotnetzone.gr:443/cs/forums/13/ShowForum.aspx</link><description>Θέματα για web εφαρμογές, σε ASP.NET WebForms</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Global αντικείμενα σε Web Projects</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/5889.aspx</link><pubDate>Wed, 05 Oct 2005 17:48:45 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5889</guid><dc:creator>kkara</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/5889.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=5889</wfw:commentRss><description>Ευχαριστώ πολύ για την γρήγορη απάντηση. Όντως το Enterprise Library
είναι κάτι που είχα υπ'όψην μου να χρησιμοποιήσω σε κάποιο μεγαλύτερο
project. Όταν θα έρθει η ώρα θα φροντίσω να απευθυνθώ στο DNZ. Απ' ότι
βλέπω θα μου βγει σε καλό...&lt;img src="/cs/emoticons/emotion-5.gif" alt="Wink [;)]" /&gt; &lt;br&gt;</description></item><item><title>Απ: Global αντικείμενα σε Web Projects</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/5885.aspx</link><pubDate>Wed, 05 Oct 2005 04:32:07 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5885</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/5885.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=5885</wfw:commentRss><description>Να συμπληρώσω ότι το caching application block σου δίνει έναν εννιαίο τρόπο διαχείρισης του cache τόσο στα webforms όσο και στα winforms. Παρ' όλα αυτά, στις περισσότερες περιτπώσεις web forms και ιδιαίτερα σε μικρά projects δεν χρησιμοποιείται πάντα γιατί σε γενικές γραμμές το caching που έχουν τα web forms με τον IIS είναι ικανοποιητικό και καλύπτει τις περισσότερες ανάγκες (άντε να χρειαστείς κάνα δυο πατέντες σαν αυτή που έκανες). Αν όμως είσαι επαγγελματίας στα web forms και έχεις μεγάλη παραγωγή, αξίζει να ασχοληθείς με τα application blocks προκειμένου να "μοντελοποιήσεις" τις λύσεις που δίνεις στους πελάτες σου, το πιθανότερο είναι ότι αν το δεις συνολικά θα βελτιώσει την παραγωγικότητά σου.</description></item><item><title>Απ: Global αντικείμενα σε Web Projects</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/5884.aspx</link><pubDate>Wed, 05 Oct 2005 04:25:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5884</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/5884.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=5884</wfw:commentRss><description>&lt;P&gt;Σε γενικές γραμμές αυτό που έκανες είναι μια συνηθισμένη απλή πρακτική, δηλαδή καλείς μια Function που πριν σου επιστρέψει πράγματα από το cache, κοιτάει πρώτα μήπως το cache χρειάζεται γέμισμα.&lt;/P&gt;
&lt;P&gt;Αν το θέλεις "πιο elegant" ή "πιο Microsofτικά", αυτό που έφτιαξες είναι ένας υποτυπώδης cache manager. Το επόμενο βήμα σου είναι να εξερευνήσεις πως η όλη διαδικασία γίνεται πιο οργανωμένα στα πλαίσια του &lt;A href="http://msdn.microsoft.com/library/en-us/dnpag2/html/caching1.asp"&gt;Caching Application Block &lt;/A&gt;το οποίο αποτελεί τμήμα του &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/entlib.asp"&gt;Enterptise Library &lt;/A&gt;(παλαιότερα δινόταν και μόνο του).&lt;/P&gt;
&lt;P&gt;Σε γενικές γραμμές&amp;nbsp;αυτό οργανώνει τα πράγματα σε 3 οντότητες:&amp;nbsp;Backing Stores (θέσεις στις οποίες μπορείς να κρατάς τα cacharισμένα σου αντικείμενα, και μπορεί να είναι η μνήμη, ο δίσκος, ή ακόμα και μια βάση δεδομένων), Cache (Δίνει και παίρνει δεδομένα από τα backing stores) και Cache Managers τα οποία είναι οι κλάσεις με τις οποίες μιλάει η εφαρμογή σου και ξέρουν πως να διαχειριστούν τo cache για να σου φέρουν τα πράγματα που ζήτησες (κάτι άντιστοιχο με το δικό σου). Επίσης σου δίνει τη δυνατότητα να καθορίσεις ακριβώς τι συμβαίνει σε περίπτωση που κάποιο αντικείμενο βγαίνει απο το cache.&lt;/P&gt;
&lt;P&gt;Το να μπλέξεις με τo Caching Application Block και με το Enterprise Library γενικότερα ίσως είναι λίγο στριφνό στην αρχή, αλλά αν έχεις λίγη υπομονή και επιμονή είναι αναμφίβολα τεράστιο asset, όχι μόνο για να λύσεις τα συγκεκριμένα προβλήματα τα οποία πραγματεύεται, αλλά και στον τρόπο σκέψης σου σαν προγραμματιστής.&lt;/P&gt;
&lt;P&gt;Κάνε μια προσπάθεια και αν κολλήσεις... εδώ είμαστε...&lt;/P&gt;</description></item><item><title>Global αντικείμενα σε Web Projects</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/5883.aspx</link><pubDate>Wed, 05 Oct 2005 03:57:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5883</guid><dc:creator>kkara</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/5883.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=5883</wfw:commentRss><description>Καλησπέρα σε όλους,&lt;br&gt;
&lt;br&gt;
Από όταν ξεκίνησα να γράφω Web εφαρμογές με ASP.NET είχα πάντα ένα
άγχος για το που να τοποθετώ όλες τις μεταβλητές - αντικείμενα που
έπρεπε να είναι προσβάσιμα από οποιοδήποτε κομμάτι κώδικα, π.χ. XML
configuration αρχεία, βασικά Datasets, instances αντικειμένων πρόσβασης
στη ΒΔ κτλ κτλ...&lt;br&gt;
Μια πρώτη επιλογή θα ήταν στο &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;Application&lt;/span&gt; object, αλλά τότε έχανα τη
δυνατότητα να ανανεωθεί αυτόματα κάτι όταν αλλάζει. Για αυτό το λόγο
είναι σκόπιμη η χρήση του &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;Cache&lt;/span&gt; object αλλά στο Cache δεν μπορεί κανείς
να σου εγγυηθεί ότι όταν εισάγεις κάτι αυτό θα βρίσκεται εκεί εσαεί
(εντάξει μπορείς να του βάλεις υψηλή σημαντικότητα αλλά... you get the
point).&lt;br&gt;
Σε κάποιο project έλυσα αυτό το θέμα υλοποιώντας μια κλάση που
κληρονομούσε την &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;System.Web.UI.Page&lt;/span&gt;. Σε αυτή
την κλάση υλοποίησα μεθόδους ή Properties που μου επέστρεφαν το
αντικείμενο που ζητούσα. Κατόπιν έβαλα όλες τις σελίδες τις εφαρμογής
να κληρονομούν αυτή τη σελίδα και έτσι βουαλά... είχα τη δυνατότητα από
όλα τα σημεία του κώδικα να έχω αυτό που θέλω. Αν ήμουν π.χ. στο
CodeBehind μιας φόρμας, έκανα cast το αντικείμενο &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;&lt;/span&gt; στην γονική κλάση και καλούσα την κατάλληλη
μέθοδο. Αν ήμουν στον κώδικα ενός User Object ή και Custom Object
χρησιμοποιούσα το αντικείμενο &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;Page&lt;/span&gt;, έκανα
πάλι τα cast μου και τσουπ... μια χαρά.&lt;br&gt;
Πάλι όμως δεν ήμουν ικανοποιημένος. Κάτι δε μου πήγαινε (ήξερα ότι δεν
είναι αυτός ο λόγος για τον οποίο υπάρχει η κληρονομικότητα&lt;img src="/cs/emoticons/emotion-1.gif" alt="Smile [:)]" /&gt;). Και
έτσι σε ένα επόμενο project μου ήρθε η φαεινή ιδέα&lt;img src="/cs/emoticons/emotion-55.gif" alt="Idea [I]" /&gt;, να χρησιμοποιήσω
για αυτό το σκοπό το Global.asax (δηλαδή την κλάση Global που υπάρχει
σε κάθε Web Project). Για του λόγου το αληθές, παραθέτω ένα property
που υλοποίησα στην κλάση Global εκείνου του project : &lt;br&gt;
&lt;br&gt;
&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;internal&lt;/span&gt; XmlDocument Skins {&lt;br /&gt;&lt;br /&gt;   get {&lt;br /&gt;      XmlDocument x &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;;&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.Context.Cache[&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Skins"&lt;/span&gt;] == &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;) {&lt;br /&gt;         &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; strFile &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt;&lt;br /&gt;Server.MapPath(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"/context/config/application/skins.xml"&lt;/span&gt;);&lt;br /&gt;         x &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; XmlDocument();&lt;br /&gt;         x.Load(strFile);&lt;br /&gt;        &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.Context.Cache.Insert(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Skins"&lt;/span&gt;, x, &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt;&lt;br /&gt;System.Web.Caching.CacheDependency(strFile));&lt;br /&gt;      }&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;else&lt;/span&gt; x &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; (XmlDocument) &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.Context.Cache[&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Skins"&lt;/span&gt;];&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; x;&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;   set {&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; strFile &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt;&lt;br /&gt;Server.MapPath(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"/context/config/application/skins.xml"&lt;/span&gt;);&lt;br /&gt;      value.Save(strFile);&lt;br /&gt;   }&lt;br /&gt;}&lt;/span&gt;&lt;br&gt;
&lt;br&gt;
Εντάξει, το έκαψα και λίγο αφού έβαλα μέχρι και να κάνει save το αρχείο
από το property αλλά τη γενική ιδέα την έχετε. Φυσικά το instance του
κλάσης Global είναι προσβάσιμο από οποιαδήποτε Page κλάση, User Control
ή Custom Control μέσω του &lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;ApplicationInstance&lt;/span&gt;. Έτσι για να πάρω το skins.xml
σε κάποια φόρμα μου έγραφα απλά (ok, το παραδέχομαι, δεν είναι ακριβώς απλό αλλά είναι λειτουργικό): &lt;br&gt;
&lt;br&gt;
&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;XmlDocument x &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; ((Global)&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.Context.ApplicationInstance).Skins;&lt;/span&gt;&lt;br&gt;
&lt;br&gt;
Όλα τα παραπάνω τα έγραψα για να καταλήξω στα επόμενα ερωτήματα : &lt;br&gt;
&lt;ol&gt;
  &lt;li&gt;Βρίσκετε κάποιο σφάλμα σε αυτή την πρακτική; Μήπως υπάρχει κάτι που έχω παραβλέψει;&lt;/li&gt;
  &lt;li&gt;Ασχέτως της απάντησης στο 1 θα ήθελα να μου πείτε κάποιες
προτάσεις και λύσεις που χρησιμοποιείτε εσείς ως πιο έμπειροι
προγραμματιστές για την επίλυση αυτού του προβλήματος.&lt;br&gt;
  &lt;/li&gt;
&lt;/ol&gt;



Γενικώς είμαι αυτοδίδακτος στο .NET και θα ήθελα να ακούσω μερικές
προτάσεις για αυτό το θέμα που κατά πάσα πιθανότητα δεν θα μου είχαν
ποτέ περάσει από το μυαλό...&lt;br&gt;</description></item></channel></rss>