我有几个带有原始数据的类,例如:

public interface Transaction {
   public double getAmount();
   public Date getDate();
}

我需要在几个地方输出这些数据的格式化版本。例如,我可能在网页上将金额显示为 $1,000,或在 Excel 下载中显示为 1000.00。我还希望能够在不同的地方重用相同的格式化代码。有些会很简单(比如以某种格式显示日期),但有些会更复杂(比如根据另一个字段的值显示一个字段的不同值)。

我的问题是:我应该把格式化代码放在哪里?我能想到几个地方:
  • 向数据对象添加方法,如 getAmountHTML()getAmountExcel() 。方便,但是会不会让模型和 View 的关联度太高?
  • 显示数据时在模板中进行格式化。灵活,但由于它不在一种方法中,因此我无法在不同的地方轻松重用相同的格式。
  • 为每个数据类创建一个格式化类,并给它一个对原始数据对象的引用。

  • 我将有很多数据对象要格式化,所以我想提出一个好的方法。有没有相关经验可以分享一下?

    最佳答案

    我同意 Vivin 的观点,您不应该向数据对象添加各种方法来处理每种可能的格式。让 View 定义显示字符串是合适的。

    您拥有的另一个选项(仍然允许 View 定义格式化程序)是使用一种访问者模式。在这里,您的 Transaction 对象接收一个格式化程序作为新方法的参数:

    public String getFormattedString(Formatter f);
    

    输出显然是一个格式化的字符串。这将使您可以为每个 View 使用单个数字格式化程序,可以将其传递给每个不同的数据对象进行格式化。

    关于model-view-controller - 我在哪里放置格式化逻辑?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3580096/

    10-14 18:00
    查看更多