2013-01-06 8 views
9

あなたは非常に頻繁に以下のようなコードスニペットに実行されますMVCのコードを見ている:コントローラ名、コントローラのアクション名またはビュー名はハードコーディングされた文字列として提供されるMVCのコントローラ、ビュー、アクションの名前をハードコーディングしていますか?

return RedirectToAction("Index"); 

<li>@Html.ActionLink("Books", "Index", "Books")</li> 

。これは一般的な習慣ですが、それは良い方法ですか?結局のところ、コントローラの名前を変更して、多くの参照の名前を変更するのを忘れると、コンパイル時にはるかに好ましいエラーではなく、ランタイムエラーが発生します。

BaseControllerに静的なNameプロパティを追加してこの問題を緩和し、コードを次のように使用することができます(アクション名はやや難しくなります)。

<li>@Html.ActionLink("Books", "Index", BooksController.Name)</li> 

このハードコーディングは、MVCを使用しない場合よりも悪いことではありません。あるいは、人々はそれを回避するいくつかのプラクティスを開発しましたか?

+0

このような状況に遭遇したことはありませんでしたが、私は回避策が好きで、それが発生した場合は使用します。 – AgnosticDev

+5

あなたはT4MVCを探しています。 – SLaks

+0

確かに。ちょうどビデオを見ました。答えにしたいですか? –

答えて

4

強く型付けされた文字列定数クラスを生成するT4MVCを探しています。

2

本物のことに、文字列リテラルは悪いことなので、 "Books"を定数にするのは本来的には良いと思います。アイデアは文字列を単一の場所に置くことです。したがって、 "Books"を "Products"に変更する必要がある場合、たとえば、1つの場所で変更するだけです。

しかし、このようにすると、あなたの手助けとなるツールを使いこなすことになります。私はちょうど "HomeController"を "BananaController"に改名するためにResharperを使用しました。そして、それは自動的にすべての参照を@Html.ActionLink(... "Banana" ..)に更新しました。

VSがResharperなしでそうするかどうかわかりません。 VSは毎年リファクタリングで良くなってきていますが、Resharperを持っていない人は実際には働いていません...

+0

ええ、R#はかなりスマートです。それらの文字列リテラルをクリックしてコードにナビゲートすることができたら、私はそれも好きです。まだ私はそれらのリテラルが必要ではないように感じます。 –

+0

テキストブックやサンプルアプリを読んでいただきたい場合は、文字列として残しておきます。 @ SLaksが言及しているT4MVCは、次の良いステップのように見えます。私は、MVCレンダリングをサーバーからクライアントに移動して、それらの文字列を完全に取り除く方法を検討していますが、私はまだJSONを構築する必要があります。私はT4MVC =をチェックするつもりです) – jamie

関連する問題