关闭

一道面试题的分析(续)

标签: 面试string数据库class
1535人阅读 评论(1) 收藏 举报
分类:

前面的讨论中留下了一个问题,还没有分析完。就是表示“币种”的数据类型。因此继续讨论的话就要超出了面试题目的范围,所以另开一文。

如果对币种信息的要求只是为了区别不同Money对象所代表的货币种类,以保证只有相同币种的Money对象才能进行计算,那么无论是String, int还是enum都够了。但是,在一个稍大一点的项目中,要求可能都不会仅限于此。比如需要在显示金额的时候能显示正确的货币符号,或者一些系统中还需要显示3位的币种代码,比如用USD表示美元,RMB表示人民币。在有用户输入或者和其它系统交互的情况下,还会需要判断输入的数据是否是合法的,系统支持的币种。有这些需求的情况下,自然的,我们需要一个单独的类Currency。至于在Currency内部使用具体什么类型,参见前一篇中的讨论。

因此,Money类应该是这个样子的:

public class Money {
    private Currency currency;
    private BigDecimal amount;
   
    public Money (Currency aCurrency, BigDecimal aAmount) {
        ...
    }
   
    public Money add (Money aMoney)
    throws IncompatibleCurrencyException {
        ...
    }
   
    public Money subtract (Money aMoney)
    throws IncompatibleCurrencyException {
        ...
    }
}

如果系统中需要由用户来维护系统所能支持的币种,那么一般需要在数据库中维护一张表,此时Currency就是一个可持久化类了。

关于这个设计问题,还请参看我前面翻译的那篇“Prefactoring”的2.6节。虽然那篇文章主要讨论的是分析和领域建模阶段,但是很多讨论对于设计阶段仍然是有效的。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:37674次
    • 积分:554
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:0篇
    • 译文:3篇
    • 评论:42条
    最新评论
    朋友
    我的其它站点