1

したがって、私は以下のコードを使用して、初期ロード時にページのいくつかの要素を表示しています。MVCビジネスロジックと表示/ UIロジック

<script type="text/javascript"> 

    $(function(){ 
     @if (ViewBag.PageFunction == "Edit" && Model.ProductType.ProductTypeName == "Book") 
     { 
      @:$('#product-isbn').show(); 
     } 

     @if (ViewBag.PageFunction == "Edit" && Model.HasBulkDiscount == true) 
     { 
      @:$('#product-bulk-discount').show(); 
     } 
    }); 

</script> 

我々は最近、MVCに移動してきたし、私のマネージャーと同僚は、トップ制御構造はビジネスロジックであることを私に言っているが、下の1は、ビジネスロジックではない、と私はビジネスロジックを持つべきではないこと私からしてみれば。

これは私の見解では完全に有効なコードであると私は同意しないと感じます。私は正しいのですか、間違っていますか?

私のマネージャーからも、再利用できないため、@Html.LabelFor()を私の見解で使用しないでくださいと教えてくれました。ここで私がどのように使用しているのかの例です。

<div class="form-group"> 
    <p>@Html.LabelFor(p => p.ProductName, new { @class = "col-sm-12" })</p> 
    <div class="col-sm-12"> 
     @Html.TextBoxFor(p => p.ProductName, new { @class = "form-control" }) 
    </div> 
</div> 

私もその推論を理解しているかどうかわかりません。

+0

あなたの使い方は正しいですし、あなたのテキストボックスに関連付けられた '

+0

ええ、わかりません。彼は私に尋ねました。「@ Html.Labelforを使うのではなく、実際のラベルをタイプするだけではどうですか?これをモデルに結びつけて説明しようとしましたが、複数の場所でこのラベルを使用している場合は、モデルのDisplayName属性を更新するだけで、使用されているどこでも更新されます。彼はこれまでRazorを使用していなかったので、Razorを使うのは本当に嫌悪感を持っているようだ。 – Namrehs

+3

ビュー内でHtmlHelperメソッドを使用していないのは、IMHOです。ナンセンスです。彼らはあなたがhtmlが常に正しく生成されることを保証します。 –

答えて

2

MVCは常にUIの一部であり、UIにはビジネスロジックがありません。 ビューモデルはビジネスモデルではなく、ビューのデータですが、UI固有のロジックをいくつか含むことができます。

あなたのコードには、表示ロジック、つまりUIロジックが含まれているため完全にOKです。 Html.LabelForは、htmlをより速く生成できるヘルパー(素晴らしいものではない)です。それは生産性と保守性に役立ちます、あなたのマネージャーはそれらの側面に興味を持っている必要があります。

このタイプのヘルパーは、再利用可能なページ要素/ウィジェットとみなすための細かい/細かい方法です。しかし、独自のHTMLヘルパー(あらかじめ定義されたヘルパーを使用することもできます)を作成することで、パーシャルを使用して、またはC#で直接ビルドすることができます。

+0

ありがとうMikeSW。マネージャーは、Razorコードを一切使用せず、MVCアプリケーションで厳密にHTML/Knockoutを使用することに決めました。 – Namrehs

0

私は、ビューのロジックに関する同僚の懸念を理解することができます。 MVCのようなデザインパターンの「separated presentation」の重要な原則の1つは、コンポーネントを分離することで自動テストが容易になるということです。

プレゼンテーションコンポーネントのロジックに対する議論は、プレゼンテーションコンポーネントが通常自動テストの対象になることがより困難であるため、自動テストでカバーできるコードの量を削減することです。

あなたの表示コードが単純なif (x == y) { show }だった場合、議論はありません。しかし、あなたのロジックが少し複雑で、あなたが&&になっていることを考えれば、私はその論理を自動化された方法でテストする方法を尋ねるでしょう。このロジックがビューにあるという事実は、プレゼンテーション以外のコンポーネント(コントローラなど)にある場合よりもテストを困難にします。実際には、手動でテストするか、Seleniumのようなフロントエンドテストフレームワークでテストする必要があります。どちらの方法も、自動化されたユニットや統合テストよりも高価です。

つまり、自動化されたテストがあなたのチームにとって価値のあるものではないとすれば、あなたはあなたの望みどおりに多くのロジックをビューに入れることができます。ソリューション全体がフロントエンド経由でテストされ、アプリケーションの機能を作成するメカニズムはテスターに​​は不透明になります。

関連する問題