.NET - 将URL存储为全局变量

时间:2011-01-05 20:54:47

标签: .net global-variables

我正在寻找关于这个问题的意见和/或建议。在我们的网站上,我们提供了项目符号列表(它们没有按相同的顺序列出,也没有包含相同的链接)。一个链接可能是许多项目符号列表的一部分,但未列在与另一个列表相同的位置。我想知道创建一个全局URL列表然后为每个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。

3 个答案:

答案 0 :(得分: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> 

这将是一种更好的方式来封装网址的概念。

对于列表,您可以轻松扩展概念,如下所示:

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; } }
}

答案 1 :(得分:0)

您可以考虑一些问题吗?

一个。确定哪些链接进入列表以及这些列表建立频率的变量是什么?

湾在网络应用程序上线时链接是否可能发生变化?如果是,您应该保留这些并从数据库表或平面文件(如xml)中读取它们。否则,如果这些是在运行时期间变化不大的部署时值,请从资源文件中读取它们。

答案 2 :(得分:0)

1)如果链接在页面之间以相同的方式呈现,您可以使用用户控件来呈现它,然后使用@OutputCache属性来控制呈现的html的缓存。

2)如果链接以不同的方式显示在页面上,如果它们构成一个很大的过程,那么我宁愿将它们存储在Cache中。