9

MVCコードを調べると、次のようなコードスニペットに遭遇することがよくあります。

return RedirectToAction("Index");

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

ここで、コントローラー名、コントローラーアクション名、またはビュー名は、ハードコードされた文字列として提供されます。これは一般的な方法ですが、良い方法ですか?結局のところ、コントローラーの名前を変更し、多くの参照の1つを名前変更するのを忘れると、はるかに好ましいコンパイル時エラーではなく、実行時エラーが発生します。

BaseControllerに静的なNameプロパティを追加し、次のようにコードを使用することで、この問題を軽減できる可能性があります(アクション名の実行は少し難しくなります)。

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

したがって、このハードコーディングは、(MVCを使用しないよりも)それほど悪ではないと見なされるべきものです。それとも、人々はそれを回避するためのいくつかの実践を開発しましたか?

4

2 に答える 2

4

文字列定数の厳密に型指定されたクラスを生成するT4MVCを探しています。

于 2013-01-11T16:23:13.740 に答える
2

文字列リテラルが悪いことだと私たちは本能的に知っているので、"Books" を定数にするという本能は通常は良いことです。アイデアは、文字列を 1 つの場所に配置することです。たとえば、"Books" を "Products" に変更する必要がある場合は、1 つの場所で変更するだけで済みます。

ただし、そうすることで、あなたを助けるツールそのものを台無しにしてしまいます。Resharper を使用して「HomeController」の名前を「BananaController」に変更したところ、@Html.ActionLink(... "Home" ..)へのすべての参照が自動的に更新されました。@Html.ActionLink(... "Banana" ..)

VSがResharperなしでそれを行うかどうかはわかりません。VS は年々リファクタリングが上手になっていると言われますが、Resharper を持っていない人と実際に仕事をしたことはありません...

于 2013-01-06T03:10:35.893 に答える