Tuesday, September 21, 2010

Just Another String Enum

Enum sono molto utili. Uno dei problemi degli Enum in .NET è la mancanza di supporto per stringhe. Infatti questi possono essere solamente di tipo numerico.
Vediamo come aggiungere il supporto delle stringhe agli Enum. L’idea è di utilizzare un “Extension Methods” per aggiungere alla classe Enum il metodo GetStrOfEnumMemberAtt e per enumerare i valori con le stringhe utilizziamo la classe EnumMember.

La seguente classe contiene “Extension Methods” che poi utilizzeremmo per accedere alla stringa. Vorrei fare notare, che questa classe utilizza un oggetto Dictionary come cache per essere più performante.

public static class EnumExtensions
{
    //cache
    private static Dictionary<Enum, string> _stringValues = new Dictionary<Enum, string>();

    public static string GetStrOfEnumMemberAtt(this Enum value)
    {
        if (!_stringValues.ContainsKey(value))
        {
            //Add to cache
            Type type = value.GetType();
            FieldInfo fi = type.GetField(value.ToString());
            EnumMemberAttribute[] attrs = fi.GetCustomAttributes(typeof(EnumMemberAttribute), false) as EnumMemberAttribute[];
            if (attrs.Length > 0 && !string.IsNullOrEmpty(attrs[0].Value))
            {
                _stringValues.Add(value, attrs[0].Value);
            }
            else
            {
                _stringValues.Add(value, value.ToString());
            }
        }
        return _stringValues[value];
    }
}

Questo è un esempio di come decorare gli Enum con le stringhe:

public enum MachineTypes{
    [EnumMember(Value = "Motorcycle")]
    MOTO,
    [EnumMember()]
    BICYCLE,
    CAR
}

Poi è semplice, per accedere al stringa basta chiamare il metodo GetStrOfEnumMemberAtt come in questo esempio:

//s1=Motorcycle
string s1 = MachineTypes.MOTO.GetStrOfEnumMemberAtt(); 
//s2=BICYCLE
string s2 = MachineTypes.BICYCLE.GetStrOfEnumMemberAtt();
//s3=CAR
string s3 = MachineTypes.CAR.GetStrOfEnumMemberAtt();

Monday, September 20, 2010

Performanceprobleme??? Hier die Lösung

Jeder seriöse Webentwickler sollte den Artikel “Best Practices for Speeding Up Your Website” (http://developer.yahoo.com/performance/rules.html) von Yahoo Developer Network kennen.
Hier nochmals eine kleine Zusammenfassung der wichtigsten Regeln:

  • Minimieren Sie HTTP-Requests
    • Alle Script Dateien sollten zu einer großen Script Datei zusammengeführt werden, das gleich gilt für CSS Dateien.
  • Verwenden Sie einen Content Delivery Network
  • Verwenden Sie eine Expires oder Cache Header
  • Verwenden Sie Gzip Components
  • Referenzieren Sie Stylesheets im Header
  • Referenzieren Sie Scripts auf der Unterseite
  • Vermeiden Sie CSS Ausdrücke
  • Script und CSS sollten in externen Dateien vorliegen
  • Reduzieren Sie DNS-Lookups
  • Verkleinern Sie Script und CSS Dateien
    • Entfernen Sie unnötige Zeichen (Leerzeichen, Zeilenumbruch und Tabulator)
    • Entfernen Sie Kommentare und unnötigen Code

Nachdem wir ein bisschen die Theorie aufgefrischt haben nun die Praxis:
Die NET-Bibliothek COMBRES (http://combres.codeplex.com/) ermöglicht das Verkleinern, die Kompression und die Kombination von Script und CSS Dateien. Zudem erlaubt diese das Zwischenspeichern (= Caching) von Script und CSS Ressourcen für ASP.NET und ASP.NET MVC Web-Anwendungen.

Saturday, September 18, 2010

Un estensione utile per l’oggetto NameValueCollection

Queste poche righe di codice permettono di trasformare una NameValueCollecition in un oggetto Dictionary<string, string>.

public static class NameValueCollectionExentsions
{
    public static IDictionary<string, string> ToDictionary(this NameValueCollection source)
    {
        return source.AllKeys.ToDictionary<string, string, string>(x => x, x => source[x]);
    }
}

Cosi facendo sarà possibile utilizzare LINQ per fare delle queries.

IDictionary<string, string> queryStr = context.Request.QueryString.ToDictionary();
queryStr.SingleOrDefault(x => x.Key.Equals("Value", StringComparison.InvariantCultureIgnoreCase));

Wednesday, September 15, 2010

A riguardo della sicurezza...

Technorati Tags: ,

Secondo questo articolo (http://visualstudiomagazine.com/articles/2010/09/14/aspnet-security-hack.aspx) ci sarebbe un bug nell’ implementazione del algoritmo AES di .NET.
Per sviluppatori e amministratori di sistemi ASP.NET io consiglio di  aggiungere o modificare la sezione  machineKey del file web.config come segue: