在 MVP 模式中,演示者是否负责将数字格式化为百分比?

In the MVP pattern, is the presenter responsible for formatting numbers to percent?

所以演示者调用模型来获取一些数据。

该数据作为未格式化的 DTO 返回。

假设数据只是一个小数 .12

然后演示者是否将数字格式化为百分比?

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

还是观点责任?

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

我不使用 C# 和 WebFormsMvp,但我认为您的问题与常见的 MVP 架构非常相关。让我在 WebFormsMvp 范围之外解释它。 P 的唯一职责应该是在 M 和 V 之间进行调解(就如何 "pass" M 数据到 V 而言,反之亦然),而 V 负责 如何 数据代表给用户。

考虑以下情况:您决定删除 txtAmount 字段(假设它只是一个文本标签或输入等)以支持某种进度条或简单图表。如果您之前传递了 "normalized" 数值(因为它们来自您的 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; }
}

对于后者,您将面临 "string to decimal" 问题,因为 Amount 属性 需要将 string IView.Amount 返工为 decimal IView.Amount(甚至更糟:在 IView 实例中解析删除 % 符号等的百分比值,以使其再次成为数字,即使不知道原始数字类型:它是小数还是小数整数?)

您也可以将百分比视为人类的 V:百分比视图中的 42% 或 promille 视图中的 420‰ 在模型中仍然是 0.42。