值对象getter

时间:2010-03-22 02:25:09

标签: java getter

我有一个值对象,它存储信息,例如金额。 getAmount()getter返回以美分为单位的金额。但是在各个地方,我们需要以美元计算金额。我能想到两种方法:

  1. 编写转换方法并将其放在实用程序类中。
  2. 在值对象中添加getAmountInDollar()getter。
  3. 我更喜欢第二种方法。你怎么看?这两种方法的优点和缺点是什么?

6 个答案:

答案 0 :(得分:4)

我认为最好通过指示哪些单位的重载来推广您的getter,因此我可以调用getAmount()来获取默认值,但getAmount(Units.Dollar)getAmount(Units.Euro)也是无需为每种可能的货币转换创建新的getter。

当然,这可以进一步概括,因此您可以在开尔文内部存储温度值,但可以允许getAmount(Units.Celsius)getAmount(Units.Rankine)获得其他比例的温度。

答案 1 :(得分:3)

老实说我正在努力解决这个问题,因为我认为钱应该始终用小数表示,在内部用作小数,然后在输出时根据需要进行格式化。所以我可能会在输出格式化程序中处理美元/美分问题。

如果我需要处理转换到其他货币单位,那么我将创建一个Money类并将其返回到包含金额和单位信息的Money类(并且可能是与用于转换的服务的连接)根据需要)。

答案 2 :(得分:1)

这有点像品味问题。但是,在我看来,如果这些信息与相关模型无关,那么我更喜欢第一种方法。它使模型保持清洁,另一个好处是它可以重复使用那种类型的所有其他值。如果你将货币类型作为该实用方法的另一个参数,那么它会更好,这样它就更灵活了。提示:NumberFormat

答案 3 :(得分:1)

我更喜欢让一个类的公共API相当集中。一旦你开始添加不属于“核心”的方法,你就有可能拥有一个非常复杂的野兽。在一个几乎只保存数据的类的情况下,我会努力保持这种方式。

最终没有明确的“最佳”答案......它只是基于您的个人经验。我说,一旦你开始“污染”API就很难停止,最终你需要打破这个课程。

实用程序类还为您提供了一个放置其他相关但不完全的方法的地方,这些方法可能会随着时间的推移而找到。

如果你的目标是减少课程数量,我会说不要。如果您觉得在类中使用该方法会使代码“干净”而不是那样。

答案 4 :(得分:0)

因为封装是关于“黑盒子”场景中的数据和行为,所以我更喜欢第二种,用于面向对象的说服。

答案 5 :(得分:0)

我喜欢选项1,因此它可以用于任何可能以美分为单位的值,而不仅仅是该特定类中的特定字段。它使代码可以在代码中的其他地方使用而无需重复代码。