我有几个带有原始数据的类,例如:
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/