匿名クラスを使ったリファクタリング

最近、メソッド内のローカル変数の数が多くなると、関連性のあるものを匿名クラスを使ってまとめるようになりました。こんな風に。

// WCF で使う設定を匿名クラスにまとめる
var config = new {
    BaseAddress = "net.pipe://localhost",
    Address = "Greeting",
    Binding = new NetNamedPipeBinding(),
};

var host = new ServiceHost(
    typeof(GreetingService),
    config.BaseAddress);
host.AddServiceEndpoint(
    typeof(IGreetingService),
    config.Binding,
    config.Address);
host.Open();

var client = ChannelFactory<IGreetingService>.CreateChannel(
    config.Binding,
    new EndpointAddress(config.Address));
var result = client.Greet("Ichiro");

((IClientChannel)client).Close();
host.Close();

このサンプルだとあまりありがたみを感じないですね…。もっとローカル変数の数が多くなると、関連性のあるローカル変数をまとめることで、コードが見やすくなります。見やすいかどうかは個人差がありますが、私は大量のローカル変数を生理的に受け付けないので、まとめた方が見やすいです。


当然ですが、何でもかんでも1つにまとめると、逆にコードが見にくくなってしまいます。やりすぎ禁物。


ネットでC#のサンプルを探してると、たま〜にこの手法を見かけます。ホント、たま〜にですが。せっかくだし、名前を付けたいですね。『匿名クラスパターン』とでも呼びましょうか。既に名前が付いてるのかもしれませんが、私はそう呼ぶことにします。