読者です 読者をやめる 読者になる 読者になる

だるろぐ

とてもだるだるした日記です http://about.daruyanagi.jp/

お知らせ

WebMatrix + ASP.NET Web Pages でキレイにコーディングしたい(5)

けれど、これだと IntelliSense の助けが得られないな。無理して App に Theme 関連の変数や関数が属すようにせず、 Static な Theme クラスを作って、そっちで管理するほうがいいかもしれない。

WebMatrix + ASP.NET Web Pages でキレイにコーディングしたい(4) - だるろぐ

さっそくやってみた。

まず、 App_Code フォルダに Theme.cs を作成して、以下のようにコーディング。前回のと内容的には殆ど変わらない。

using System.Web;

public static class Theme
{
    const string ThemeBaseDir = "~/Themes/";
    const string ThemeLayoutFile = "_Layout.cshtml";

    public static void Load(string name) { Name = name; }

    public static string Name { get; private set; }

    public static string Path
    { 
        get 
        { 
            return VirtualPathUtility.ToAbsolute(
                System.IO.Path.Combine(ThemeBaseDir, Name)
            );
        }
    }
    
    public static string Layout
    {
        get
        {
            return VirtualPathUtility.ToAbsolute(
                System.IO.Path.Combine(ThemeBaseDir, Name, ThemeLayoutFile)
            );
        }
    }
}

“_AppStart.cshtml”も書き換えておく。

@{
    // App.Theme = "Default";
    Theme.Load("Default");
}

最初は Theme.Name を public にして Theme.Name = "Default" みたいな感じで使うようにしていたけれど、 Theme.Load() の方が意図が明確になると思った。

さてはて、レイアウトファイルの方も書き換えよう。

<link rel="stylesheet" href="~/Content/Reset.css" />
<link rel="stylesheet" href="~/Content/Common.css" />
<!-- <link rel="stylesheet" href="@App.GetThemePath()/Styles/Main.css" /> -->
<link rel="stylesheet" href="@Theme.Path/Styles/Main.css" />

f:id:daruyanagi:20120815053803p:plain

dynamic 型にしたら入力補完されないけれど、ちゃんとクラスにしたら……ほら! クラスの責務も明確になるし、断然こっちのほうがいいなと自己満足した。

閑話休題

WebMatrix 2 RC 版はなかなか完成度が高いと思うけれど、テキストのコピーにやたら時間がかかったり*1、まれにコピー&ペーストそのものができなくなってしまう。 NuGet のリボンボタンが行方不明になるのもたまに困る。

f:id:daruyanagi:20120815054857p:plain

あと、[Alt]キーでメニューのナビゲーションが出るのだけれど、そっちにフォーカスがとられて矩形選択や IME の切り替え*2に支障が出るのもなおしてほしいところかな。[Alt]キー = メニュー操作 というのは確かにわかりやすいのだけれど。

不具合のいくつかはすでに報告済み。 RTM でちゃんとなおればいいなぁ、と思った。

*1:とくに[テキストを折り返す]を ON にすると絶望的に遅いことがある

*2:英語配列だと[Alt]+[~]キーが標準