2011-01-05 5 views
0

Je cherche des opinions et/ou des suggestions sur cette question. Sur notre site Web, nous avons des listes d'URL à puces (elles ne sont pas répertoriées dans le même ordre et ne contiennent pas les mêmes liens exacts les unes que les autres). Un lien peut faire partie d'un certain nombre de listes à puces, mais ne figure pas au même endroit que dans une autre liste. Je me demande s'il serait utile de créer une liste globale d'URL, puis d'accéder à ces variables pour chaque URL. Est-ce stupide, intelligent, ou trop?.NET - Stocker des URL comme variables globales

Exemple:

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> 

Je pense les variables globales seraient stockées dans le global.asax, mais je ne suis pas sûr que je ne suis pas familier avec le global.asax.

+0

Cela pourrait être une façon de le faire : http://blog.devarchive.net/2008/01/auto- generate-strong-typed-navigation.html – Greg

+0

Stocker cette liste dans un fichier XML séparé (ou resx) serait une bien meilleure idée. –

Répondre

2

Si vous allez stocker le lien, alors je vous recommande fortement de les stocker en utilisant des noms sémantiques, comme ceci:

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> 

Cependant, une serait une solution encore mieux de créer une classe statique avec des constantes (ou des champs) en lecture seule que vous pouvez accéder ensuite dans le code:

public static class Url 
{ 
    public const string Google = "http://www.google.com"; 
    public const string Yahoo = "http://www.yahoo.com"; 
} 

qui serait alors la cause de votre code de page pour ressembler à ceci:

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

Ce serait une bien meilleure façon d'encapsuler le concept des urls.

En ce qui concerne les listes, vous pouvez facilement étendre le concept, comme ceci:

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

Bien sûr, vous pouvez utiliser des tableaux pour sauvegarder les propriétés, mais ils sont mutable, et en général, quelque chose comme ça , ce n'est pas une bonne chose (une autre option serait d'exposer encore la propriété comme IEnumerable<string> mais utiliser un ReadOnlyCollection<string> comme un champ de support et de retour qui, qui préserverait l'immuabilité:

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

Cela ressemble à une excellente solution. Je ne cherche vraiment qu'à créer les URL globales, je ne m'inquiète pas beaucoup des listes. Ma question est la suivante: est-ce exagéré ou est-ce efficace?Pour être plus précis sur les listes, les listes contiendront un mélange de liens locaux et externes. Certains pour documenter certains à des pages. Merci! – Helldozer

+0

@Helldozer: Avec les URL globales, je pense que c'est un bon moyen d'y aller (évidemment) à cause de l'encapsulation. Vous avez tous les urls dans un endroit propre qui peut être référencé et modifié si nécessaire, avec des noms qui ont un sens * réel *. En plus de cela, vous verrez qu'il est sémantiquement similaire à une énumération, et ceux-ci sont utilisés partout et ne sont pas considérés comme exagérés. – casperOne

+0

@Helldozer: Comme pour les listes, j'utiliserais toujours la même approche, j'aurais des membres encapsulés, avec des noms pertinents pour ces URLs, et ensuite vos listes seraient comme les autres, vous les nommeriez correctement et les peuplerais en conséquence. – casperOne

0

Quelques questions à ne pas oublier?

a. Quelles sont les variables qui déterminent quels liens vont dans une liste et à quelle fréquence ces listes sont-elles construites?

b. Les liens sont-ils susceptibles de changer lorsque l'application Web est en ligne? Si oui, vous devriez les persister et les lire soit sur une table de base de données, soit sur un fichier plat (comme xml). Sinon, si ce sont des valeurs de temps de déploiement qui ne changent pas beaucoup pendant l'exécution, lisez-les dans un fichier de ressources.

0

1) Si les liens sont rendus de la même manière entre les pages, vous pouvez avoir un contrôle utilisateur pour le rendre, puis utiliser l'attribut @OutputCache pour contrôler la mise en cache du code html rendu.

2) Si les liens sont affichés différemment d'une page à l'autre et s'ils sont construits de manière différente, je préfère les stocker dans Cache.