2011-01-05 3 views
0

Ich bin auf der Suche nach Meinungen und/oder Vorschläge zu dieser Frage. Auf unserer Website haben wir eine Aufzählung von URLs (sie sind nicht in der gleichen Reihenfolge aufgelistet und enthalten nicht die gleichen genauen Links wie die anderen). Ein Link kann Teil einer Reihe von Aufzählungslisten sein, aber nicht an derselben Stelle wie in einer anderen Liste aufgeführt sein. Ich frage mich, ob es nützlich wäre, eine globale Liste von URLs zu erstellen und dann auf diese Variablen für jede URL zuzugreifen. Ist das dumm, schlau oder zu viel?. NET - Speichern von URLs als globale Variablen

Beispiel:

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> 

ich die globalen Variablen zu denken in dem global.asax gespeichert werden würde, aber ich bin mir nicht sicher, da ich mit dem global.asax nicht so vertraut bin.

+0

Dieser Weg sein könnte, es zu tun : http://blog.devarchive.net/2008/01/auto- generate-strong-typed-navigation.html – Greg

+0

Das Speichern dieser Liste in einer separaten XML-Datei (oder ResX-Datei) wäre eine viel bessere Idee. –

Antwort

2

Wenn Sie den Link speichern gehen, dann würde ich empfehlen, sie mit semantischen Namen zu speichern, etwa so:

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> 

jedoch eine noch bessere Lösung, die eine statische Klasse mit Konstanten zu erstellen wäre (oder Nur-Lese-Felder), die Sie dann im Code zugreifen:

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

die dann würde Ihre Seite Code verursachen wie folgt aussehen:

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

Dies wäre eine viel bessere Möglichkeit, das Konzept der URLs zu kapseln.

Wie für die Listen, könnte man leicht das Konzept erweitern, etwa so:

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

Natürlich können Sie Arrays verwenden könnten die Eigenschaften zu sichern, aber sie sind wandelbar, und im Allgemeinen, für so etwas wie diese , das ist keine gute Sache (eine andere Möglichkeit wäre, noch die Eigenschaft als IEnumerable<string> aussetzen, sondern eine ReadOnlyCollection<string> als Träger Feld verwenden und zurückgeben, die die Unveränderlichkeit bewahren würde:

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

Das sieht nach einer großartigen Lösung aus. Ich bin wirklich nur auf der Suche nach den globalen URLs, ich mache mir keine Sorgen um die Listen. Meine Frage ist, ist das Overkill oder ist es effizient?Um genauer auf die Listen einzugehen, enthalten die Listen eine Mischung aus lokalen und externen Links. Einige um einige auf Seiten zu dokumentieren. Vielen Dank! – Helldozer

+0

@Helldozer: Mit den globalen URLs denke ich, dass es ein guter Weg ist (offensichtlich) wegen der Kapselung. Sie haben alle URLs an einer Stelle, die referenziert und bei Bedarf geändert werden kann, mit Namen, die eine tatsächliche * Bedeutung * haben. Obendrein werden Sie sehen, dass es einer Aufzählung semantisch ähnlich ist, und diese werden überall verwendet und nicht als Overkill betrachtet. – casperOne

+0

@Helldozer: Was die Listen betrifft, würde ich immer noch den gleichen Ansatz verwenden, habe gekapselte Mitglieder mit relevanten Namen für diese relativen URLs und dann sind Ihre Listen wie alle anderen, Sie würden sie entsprechend benennen und sie entsprechend auffüllen. – casperOne

0

Einige Fragen für Sie zum Nachdenken?

a. Welche Variablen bestimmen, welche Links in eine Liste eingehen und wie oft diese Listen aufgebaut sind?

b. Werden sich die Links wahrscheinlich ändern, während die Web-App live ist? Wenn ja, sollten Sie diese beibehalten und sie entweder aus einer Datenbanktabelle oder einer Flat-Datei (wie XML) lesen. Wenn dies Werte für die Bereitstellungszeit sind, die sich während der Laufzeit nicht viel ändern, lesen Sie sie andernfalls in einer Ressourcendatei aus.

0

1) Wenn die Links auf die gleiche Weise über Seiten gerendert werden, können Sie stattdessen ein Benutzersteuerelement zum Rendern haben und dann das @OutputCache-Attribut verwenden, um das Zwischenspeichern des gerenderten HTML zu steuern.

2) Wenn die Links auf verschiedenen Seiten unterschiedlich angezeigt werden und wenn sie einen großen Prozess darstellen, würde ich sie lieber im Cache speichern.