代码之家  ›  专栏  ›  技术社区  ›  JW.

格式逻辑放在哪里?

  •  3
  • JW.  · 技术社区  · 15 年前

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

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

    $1,000 在网页上,或 1000.00 在Excel下载上。我还希望能够在不同的地方重用相同的格式代码。其中一些将很简单(例如以特定格式显示日期),但有些则更复杂(例如根据另一个字段的值显示一个字段的不同值)。

    我的问题是:格式代码应该放在哪里?我能想到几个地方:

    • getAmountHTML() getAmountExcel() . 方便,但是否会使模型与视图的关联过于紧密?

    • 为每个数据类创建一个格式化类,并为其提供对原始数据对象的引用。

    2 回复  |  直到 15 年前
        1
  •  4
  •   akf    15 年前

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

    另一个仍然允许视图定义格式化程序的选项是使用某种访问者模式。给你,你的 Transaction 对象接收格式化程序作为新方法的参数:

    public String getFormattedString(Formatter f);
    

    输出显然是格式化字符串。这样就可以为每个视图使用一个数字格式设置工具,可以将其传递给每个不同的数据对象进行格式化。

        2
  •  2
  •   Vivin Paliath    15 年前

    在我看来,格式化数据是一个需要考虑的问题。如果您使用的是JSTL,那么可以使用 <fmt:formatNumber> .

    我不喜欢选项1,因为这意味着您将视图关注点放在域对象中。有一个潜在的方法爆炸那里(如果你得到5个新格式-你会为每一个创建一个方法吗?)。

    我也不喜欢选项3,因为似乎你在为每种格式创建一个格式化类——这可能导致类爆炸,原因如选项1所示。

    FormattingService

    推荐文章