第 3 章 投资组合 投资组合
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
一分钱聪明,一块钱愚蠢。1
累人谚语
我们可以用数字乘除任何一种货币的金额。现在,我们需要将多种货币的金额相加。
5 美元 x 2 = 10 美元 |
10 欧元 x 2 = 20 欧元 |
4002 韩元 / 4 = 1000.5 韩元 |
5 美元 + 10 欧元 = 17 美元 |
1 美元 + 1100 克鲁瓦 = 2200 克鲁瓦 |
删除多余的 |
在本章中,我们将处理货币的混合模式加法。
设计下一个测试
要测试驱动下一个功能--5 美元 + 10 欧元 = 17 美元--首先勾勒出我们的程序将如何发展是很有启发性的。TDD 与软件设计相得益彰,这与流行的说法相反!
如我们的功能列表所述,假设兑换 1 欧元可获得 1.2 美元,那么 5 美元和 10 欧元相加应为 17 美元。
然而,事实同样如此:
1 EUR + 1 EUR = 2.4 USD
或者说,相当明显:
1 EUR + 1 EUR = 2 EUR
顿悟当我们把两个(或更多)Money ,只要我们知道所涉及的所有货币之间的汇率(即从每个Money 的货币兑换成我们想要表示结果的货币),结果可以用任何货币表示。即使所涉及的所有货币都是相同的,情况也是如此,就像上一个例子一样,这只是众多例子中的一个特殊例子。
提示
测试驱动开发让我们有机会在每个 RGR 周期后暂停一下,有意识地设计我们的代码。
我们知道,"美元加美元,结果是美元 "的说法过于简单。 一般的原则是,将Money 不同货币的实体相加,就得到Portfolio ,然后我们可以用任何一种货币来表示(给定货币之间的必要汇率)。
我们是否刚刚引入了一个新实体:Portfolio ?当然!让我们的代码反映我们领域的实际情况至关重要。我们正在编写代码,以表示股票持有量的集合,正确的术语是投资组合。2
当我们添加两个或更多Money 实体时,我们应该得到一个Portfolio 。我们可以扩展这个领域模型,说我们应该能够在任何特定currency 中evaluate 一个Portfolio 。这些名词和动词让我们了解了代码中的新抽象,我们将通过测试来实现这些新抽象。
提示
分析问题领域是发现新实体、关系、功能和方法的有效方法。
鉴于这一新的认识,让我们先添加两个使用相同货币的Money 实体这种比较简单的情况,把使用多种货币的情况推迟到以后:
5 美元 x 2 = 10 美元 |
10 欧元 x 2 = 20 欧元 |
4002 韩元 / 4 = 1000.5 韩元 |
5 美元 + 10 美元 = 15 美元 |
5 美元 + 10 欧元 = 17 美元 |
1 美元 + 1100 克鲁瓦 = 2200 克鲁瓦 |
删除多余的 |
让我们构建这个功能:将Money 实体添加到一起。我们将从一个测试开始,使用Portfolio 作为新实体,在同一货币中添加两个Money 实体。
Go
下面是我们的新测试TestAddition ,它是在money_test.go 中的现有测试 之后添加的:
funcTestAddition(t*testing.T){varportfolioPortfoliovarportfolioInDollarsMoneyfiveDollars:=Money{amount ...