2011-01-05 6 views
0

私はこの質問に対する意見や提案を探しています。私たちのウェブサイトには、URLの箇条書きがあります(同じ順序ではリストされておらず、互いに同じ正確なリンクも含まれていません)。 1つのリンクが複数の箇条書きリストの一部になる場合がありますが、別のリストと同じ場所にはリストされません。私はそれが有益なURLのグローバルリストを作成し、各URLのそれらの変数にアクセスすると有益だろうと思っています。これはダム、スマート、またはあまりですか?.NET - URLをグローバル変数として保存する

例:

var link001 = "http://www.google.com"; 
var link002 = "http://www.yahoo.com"; 

<ul> 
    <li><a href="<%= link001 %>'>Google</a></li> 
    <li><a href="<%= link002 %>'>Yahoo</a></li> 
    etc. 
</ul> 

私はGlobal.asaxの中に格納されるグローバル変数を考えていますが、私は私はGlobal.asaxのとその慣れていないよので、よく分かりません。

+0

これはそれを行うための一つの方法かもしれません:http://blog.devarchive.net/2008/01/auto- generate-strong-typed-navigation.html – Greg

+0

このリストを別のXML(またはresx)ファイルに保存する方がはるかに良い方法でしょう。 –

答えて

2

リンクを保存しようとしている場合はそうのように、私は非常に、セマンティック名を使用してそれらを格納推薦:

var GoogleUrl = "http://www.google.com"; 
var YahooUrl = "http://www.yahoo.com"; 

<ul> 
    <li><a href="<%= link001 %>'>Google</a></li> 
    <li><a href="<%= link002 %>'>Yahoo</a></li> 
    etc. 
</ul> 

しかし、より良い解決策は、定数と静的クラスを作成することです(あなたは、コードにアクセスすることができますまたは読み取り専用フィールド):

、あなたのページのコードは次のように見てしまう
public static class Url 
{ 
    public const string Google = "http://www.google.com"; 
    public const string Yahoo = "http://www.yahoo.com"; 
} 

<ul> 
    <li><a href="<%= Url.Google %>'>Google</a></li> 
    <li><a href="<%= Url.Yahoo %>'>Yahoo</a></li> 
    etc. 
</ul> 

これは、URLの概念をカプセル化するもっと良い方法です。リストについては

、あなたは簡単にそうように、概念を拡張できます。もちろん

public static class UrlList 
{ 
    public static IEnumerable<string> List1 
    { 
     get 
     { 
      // Return the first list: 
      yield return Url.Google; 
      yield return Url.Yahoo; 
     } 
    } 

    public static IEnumerable<string> List2 
    { 
     get 
     { 
      // Return the first list: 
      yield return Url.Yahoo; 
      yield return Url.Goggle; 
     } 
    } 
} 

をこのような何かのために、一般的にプロパティをバックアップするために配列を使用することができますが、彼らは変更可能であり、 、それは良いことではありません(別のオプションはまだIEnumerable<string>としてプロパティを公開するが、バッキングフィールドとしてReadOnlyCollection<string>を使用して不変性を維持することになる、それを返すために、次のようになります。

public static class UrlList 
{ 
    ///<summary>The backing field for <see cref="List1"/>.</summary> 
    private static readonly ReadOnlyCollection<string> list1 = 
     new ReadOnlyCollection<string>(new [] { 
      Url.Google, 
      Url.Yahoo, 
     }); 

    public static IEnumerable<string> List1 
    { get { return list1; } } 

    ///<summary>The backing field for <see cref="List2"/>.</summary> 
    private static readonly ReadOnlyCollection<string> list2 = 
     new ReadOnlyCollection<string>(new [] { 
      Url.Yahoo, 
      Url.Google, 
     }); 

    public static IEnumerable<string> List2 
    { get { return list2; } } 
} 
+0

それは素晴らしい解決策のように見えます。私は本当にグローバルURLを作成するためだけに探しています、私は多くのリストを心配していません。私の質問は、この過剰殺害かそれとも効率的なのでしょうか?リストの詳細については、リストにはローカルと外部のリンクが含まれています。いくつかはページの一部を文書化するものです。ありがとう! – Helldozer

+0

@Helldozer:グローバルなURLを使って、カプセル化のために(明らかに)行くのが良い方法だと思います。必要であれば、実際の*意味*を持つ名前で、参照および変更できる1つの場所にすべてのURLがあります。その上に、それは列挙型に意味的に類似していることがわかります。それらはどこでも使用されており、過剰な使用とはみなされません。 – casperOne

+0

@Helldozer:リストに関しては、私は引き続き同じアプローチを使用し、カプセル化されたメンバーを関連URLに関連づけてリストを作成し、適切に名前を付けてそれに応じて配置します。 – casperOne

0

いくつかご質問をお聞かせください。

a。どのリンクがリストに入るかを決定する変数は何ですか?また、これらのリストの作成頻度はどれくらいですか?

b。ウェブアプリケーションのライブ中にリンクが変更される可能性はありますか?はいの場合は、これらを保持してデータベーステーブルまたはフラットファイル(xmlなど)のいずれかから読み出す必要があります。それ以外の場合は、実行時にあまり変更されないデプロイ時の値であれば、それらをリソースファイルから読み込みます。

0

1)リンクがページ間で同じ方法でレンダリングされている場合、レンダリングするユーザーコントロールを使用して、@OutputCache属性を使用してレンダリングされたhtmlのキャッシングを制御できます。

2)リンクがページごとに異なる方法で表示されていて、それらを構成するのが大きなプロセスである場合、私はむしろそれらをキャッシュに保存します。

関連する問題