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]+[~]キーが標準