1

そのため、プレゼンターはモデルを呼び出してデータを取得します。

そのデータは、フォーマットなしの DTO として返されます。

データが単なる10進数だとしましょう.12

次に、発表者は数値をパーセントにフォーマットしますか?

view.Amount = Math.Round(dto.Amount * 100, 2) + "%";

それともビューの責任ですか?

public decimal Amount 
{
    set 
    {
        txtAmount.Text = Math.Round(dto.Amount * 100, 2) + "%";
    }
}
4

1 に答える 1

1

私は C# と WebFormsMvp を使用していませんが、あなたの質問は一般的な MVP アーキテクチャにかなり関連していると思います。WebFormsMvp の範囲外で説明させてください。P の唯一の責任は、M と V の間を仲介することであり (M データを V に、またはその逆に「渡す」方法に関して)、V はデータがユーザーにどのように表現されるかについて責任があります。

次のシナリオを考えてみましょう:txtAmount特定の種類のプログレス バーまたは単純なグラフを優先して、フィールドを削除することにしました (単なるテキスト ラベルまたは入力などであると考えてみましょう)。以前に「正規化された」数値を渡した場合 (あなたの場合は M から来ているため) - 金額ビューは生の数値を受け入れるはずなので、必要に応じて金額ビューを置き換えることができます。

public interface IView {
    decimal Amount { set; }
}

上記を以下と比較してください。

public interface IView {
    // How to apply a string to a chart as a data item?
    string Amount { set; }
}

Amount後者の場合、プロパティの「文字列から10進数へ」の問題に直面することになりstring IView.Amountますdecimal IView.Amount(さらに悪いことに、パーセンテージ値を解析して%符号を削除するなどIViewをインスタンスで正しく行う必要があります)元の数値型がわからない場合でも、数値は 10 進数でしたか、整数でしたか?)

パーセンテージを人間の V と見なすこともできます。パーセンテージ ビューでは 42%、プロミル ビューでは 420‰ は、モデルでは 0.42 のままです。

于 2016-04-26T09:17:28.240 に答える