Il blog di TixXio Un blog impossibile o privo di significato

20Gen/100

Disponibile la Beta 2 del framework .NET 4 su Windows Update

La nuova versione del framework .NET (la quattro, per intenderci) è in beta testing pubblico, disponibile per il download: per chi lo desiderasse è possibile scaricare la beta 2 del nuovo framework direttamente da Windows Update. Per abilitare l'aggiornamento è sufficiente aggiunge un'apposita chiave di registro eseguendo questo comando:

reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4B2WU" /v OptIn /t REG_DWORD /d 1 /f

L'aggiornamento non verrà scaricato, però, se avete già altre versioni beta del framework 4 installate sulla vostra macchina.

9Gen/100

C# Singleton

In questi ultimi mesi ho avuto la necessità di trovare un'implementazione del pattern singleton in C# che fosse un buon compromesso tra scarnezza del codice e laziness nella creazione dell'istanza.

Dopo un pò di ricerche ed esperimenti ho scelto la soluzione di seguito:

public sealed class MyObject
{

    // Dichiaro un costruttore statico per far si che il compilatore c# non
    // consideri il tipo come beforefieldinit
    static MyObject() { }
    MyObject() { }

    // Istanza privata dell'oggetto
    private static readonly MyObject _instance = new MyObject();

    // Proprietà pubblica che espone l'istanza all'esterno
    public static MyObject Instance
    {
        get { return _instance;  }
    }
}

Il costruttore statico garantisce che l'implementazione sia thread-safe: in questo modo l'inizializzazione dell'istanza _instance viene eseguita una sola volta per esecuzione. Inoltre per la presenza dello stesso costruttore statico la classe non viene marcata con il flag beforefieldinit dal compilatore, l'oggetto _instance viene quindi istanziato solamente alla primo accesso ad una proprietà statica di MyObject.

Se avete la necessità di un'implementazione thread safe potete modificare la proprietà pubblica come segue:

public sealed class MyObject
{
    static MyObject() { }
    MyObject() { }

    private static readonly MyObject _instance = null;

    public static MyObject Instance
    {
        get
        {
            lock(_instance)
            {
                if (_instance == null) _instance = new MyObject();
                return _instance;
            }
        }
    }
}

Cosa ne pensate di queste soluzioni? Avete individuato dei problemi a cui non ho fatto caso? Aspetto i vostri suggerimenti a riguardo nei commenti :)

26Nov/080

Design Patterns in ASP.NET

Riporto un interessante articolo sull'utilizzo dei design pattern in ASP.NET. L'autore presenta alcuni dei pattern che ritiene più utili nello sviluppo di applicazioni in ASP.NET e quindi ne presenta degli esempi di utilizzo.

I diversi pattern sono raggruppati e presentati al lettore secondo questa tassonomia:

  • Presentation Logic
    • Model-View-Controller (MVC)
    • Model-View-Presenter (MVP)
    • Use Case Controller
  • Host or Behavioral
    • Command
    • Publish-Subscribe / Observer
    • Plug-in / Module / Intercepting Filter
  • Structural
    • Service Agent / Proxy / Broker
    • Provider / Adapter
  • Creational
    • Factory / Builder / Injection
    • Singleton
  • Persistence
  • Repository

Sono certo che potrete trovare anche voi queste due pagine interessanti. Buona lettura!

Link: ASP.NET Patterns every developer should know

21Nov/080

Rispondere con 404 in ASP.NET

In Tizio&Caio ci sono diversi tipi di risorse che vengono realizzate e pubblicate per gli utenti sul sito: molte di queste, per assicurarne la qualità, richiedono di essere validate da un altro membro dello staff diverso dal creatore.

Durante questa fase la risorsa è realmente esistente all'URL in cui si troverà, ma la sua visualizzazione è limitata al solo staff, per le ragioni che ho spiegato prima. Per evitare che qualche utente malizioso possa andare alla ricerca di queste risorse facciamo in modo che, se il visitatore manca delle necessarie autorizzazioni non visualizzi un generico errore di accesso, ma un bel 404.

Fortunatamente non c'è alcun bisogno di andare a smanettare con la sezione customErrors del web.config, è sufficiente generare una HttpException:

throw new HttpException(404, "Page not found");

Il runtime di ASP.NET rileverà l'eccezione e si occuperà del redirect alla opportuna pagina per l'errore 404.

20Set/080

C# vs. Ruby

Google Trends (per chi ha tempo di giochicchiarci un pò) può offrire degli interessanti spunti di riflessione...

C# vs Ruby

Io mi sono fatto l'idea che c# è un linguaggio per lavorare, mentre ruby è ancora un qualcosa da smanettoni... Qui la fonte ed altre interessanti opinioni.