2009-07-10 4 views
6

私はいくつかの部分で私はビュー(。ASPX)自体、あまりにも多くの書式設定、連結、あまりにも多くの1つの場所で少し正規表現を置き換えて感じている点を(無意識に)持っている。ASP.Net MVCでモデルを表示する必要がありますすべての文字列ですか?

私は新しい部品を使い始めて、アプローチを改善しようとしていました。それから、私のすべてのビューモデル(in/Models/in .Webプロジェクト)の文字列またはリストプッシュで弦の注:私はモデル/ドメインを指すのではなく、特に私のViewModelを指しています。 (編集を追加)フォームのサブミットのため

public class FinanceQuoteView 
{ 
    public string Provider; 
    public string Broker; // rather than Broker == null ? "N/A" : Broker.ToUpperCase(); 
    public string Monthly; // rather than Monthly.ToString("C") 
    public string PaymentTerm; // rather than "1+" + PaymentTerm.ToString(); 
    public string FreeInsurance; // rather than insuranceIncluded ? "Yes" : "No"; 
    public string[] Restrictions; 
} 

私は(あなたがに/モデル/形成する場合、フォームモデル)コントローラのアクションを養うために別々のビューモデルを使用します。だからFinanceQuoteFormはバインダーを介して構築されたダブルスなどを含んでいます。

誰もがこのアプローチを考えていますか?ドメインからマッピングするモデルの.ToString( "C")をあまりにも多くしすぎているのですか?

答えて

3

モデルは正しいデータを生成する必要があります。次に、必要な形式でデータを生成するのはビューです。モデルの上に別のビューを作成した場合は、データの別の操作を行いたいかもしれないので、NOTをモデルから文字列として返すことをお勧めします。

+0

彼はドメインモデルについては言及していません - 彼はView Modelについて話しています。 –

+0

マーク。正しい。私は私のモデルに言及していない。私はコントローラの動作が(手動、オートマッペア、または何でも - 小さなインプリメンテーションのディテール)生成し、レンダリングのためにビューに送信するビューモデルに特に言及しています。 –

+1

私はckに同意します、View modelはデータを "フォーマット"するものです。 ONLY文字列だけを渡すことで、ビュー・モデルがデータをフォーマットする機会がなくなります。私が持つことのできる簡単な例は、モデルを表示する文字列として「日付」を渡すと、コンテンツを米国の訪問者または英国の訪問者に提供するためにコントローラでさらに操作する必要があることです。 – xandy

1

私がデザインしたビューモデルでは、自分自身が文字列に向かって大きく傾く傾向があります。結局のところ、ビューに表示されるデータのほとんどは文字列の形式をとります。私がView(.aspx/.ascx)でデータ操作を実行しようとしているときは、その論理をView Modelにプッシュして単体テストできるように真剣に検討します。結局のところ、テスト容易性はメジャー MVCから得る利点です、なぜそれを使用しないでください?

WPFでは(ちょうど短い迂回路を利用するために)コントロールの多くは他のタイプのデータ(数値、ブール値など)をネイティブに理解しますが、本来的にHTMLとして文字列に束縛されるプラットフォームでは、大部分の出力をテキストとして扱うためには、私にはかなりの意味があります。

すべてのデータは、サーバーとブラウザの間で文字列としてエンコードされているため、往復する必要があります。

私は間違いなく、それはあまりないと思う - 私はあなたが非常に特別な方法が限定されることは、それが少なすぎる:)

+1

"View(.aspx/.ascx)でデータ操作を実行しようとするたびに、論理をビューモデルにプッシュして単体テストできるようにすることを真剣に検討します。あなたはその部分を詳しく教えていただけますか?私は編集のための別のビューモデルのルートに行くつもりだったが、私はあなたのアプローチに興味がある –

+2

私たちは同じことを話していると思うが、私は自分自身を奇妙なほど明瞭に表現していないかもしれない。データ操作では、通貨の書式設定、文字列の連結などの小さなことを考えていました。あなたは知っています。出力ストリームへの途中でデータを操作する。 1つのビューモデルを表示用に、もう1つを編集用に非常に妥当なものにします。 HTTPのステートレスな世界では、一方が出力され、他方は入力されます。彼らは非常に異なるものであり、混同すべきではありません。異なるものとしてモデル化することで、その区別が非常にはっきりとわかります。 –

0

あなたの状況の縫い目を行うことができると思う:あなたのViewModelには、編集や表示のためのいずれかであります。ほとんどのビューは両方を行います:彼らは、表示のものや編集のものをたくさん持っています。このページを表示させます:

質問、回答、メモを表示します。編集:回答。

私は2を区別したくありません。多くの表示フィールドが重複して終了します。

私はむしろ表示用とフォーム値用の2つのプロパティを持つ1つのビューを持っています。

1

ほとんど、同意します。伝統的な編集フォームでは、「ポストモデル」(コントローラに渡す)とビュー/編集「ビューモデル」(ビューに渡す)のそれぞれのモデルを持つことを好みます。

ポストモデルのプロパティはすべて文字列です。これは、フィールドが投稿に含まれているかどうかを判断することができますが、そうでないものもあります。これは私のアプリケーションにとって非常に重要です。

ポストモデルがあれば、コマンド(s)は、実行するかを決定し、私のコントローラのアクションを送り込みます。

そこから表示/編集ページを閲覧中に、コントローラのアクションの結果ならば、私はそれに応じてビューモデルを構築し、ビューに供給する。

したがって、私は私が好きなタイプの私のビューモデルのプロパティを作ることができます。ポストモデルのタイプと一致する必要はありません。

スーパークリーン、そして私のすべてを完全に制御できます。

関連する問題