在 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。
所以演示者调用模型来获取一些数据。
该数据作为未格式化的 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。