我正在阅读测试驱动开发:示例。我在第 13 章。第 12 章和第 13 章介绍了Plus
对Money
对象的操作。一个Money
对象可以被其他Money
对象加。
作者在解决方案中添加了两个类(Bank
和Sum
)和一个接口(IExpression
)。这是最终解决方案的类图。
Money
存储金额和货币,例如 10 美元、5 泰铢、20 瑞士法郎。该Plus
方法返回Sum
对象。
public class Money : IExpression
{
private const string USD = "USD";
private const string CHF = "CHF";
public int Amount { get; protected set; }
public string Currency { get; private set; }
public Money(int value, string currency)
{
this.Amount = value;
this.Currency = currency;
}
public static Money Dollar(int amount)
{
return new Money(amount, USD);
}
public static Money Franc(int amount)
{
return new Money(amount, CHF);
}
public Money Times(int times)
{
return new Money(this.Amount * times, this.Currency);
}
public IExpression Plus(Money money)
{
return new Sum(this, money);
}
public Money Reduce(string to)
{
return this;
}
public override bool Equals(object obj)
{
var money = obj as Money;
if (money == null)
{
throw new ArgumentNullException("obj");
}
return this.Amount == money.Amount &&
this.Currency == money.Currency;
}
public override string ToString()
{
return string.Format("Amount: {0} {1}", this.Amount, this.Currency);
}
}
Sum
存储两个来自构造函数参数的 Money 对象。它有一种Reduce
返回新Money
对象的方法(通过添加两个对象的数量创建新对象)
public class Sum : IExpression
{
public Money Augend { get; set; }
public Money Addend { get; set; }
public Sum(Money augend, Money addend)
{
this.Augend = augend;
this.Addend = addend;
}
public Money Reduce(string to)
{
var amount = this.Augend.Amount + this.Addend.Amount;
return new Money(amount, to);
}
}
Bank
有一种方法 - Reduce
。它只是调用传入IExpression
参数的 Reduce 方法。
public class Bank
{
public Money Reduce(IExpression source, string to)
{
return source.Reduce(to);
}
}
IExpression
Money
是由和实现的接口Sum
。
public interface IExpression
{
Money Reduce(string to);
}
这些是我的问题。
Bank
在这个阶段对解决方案没有任何好处。为什么我需要它?- 为什么我需要,因为我可以在类
Sum
内部创建和返回 Money 对象(就像作者所做的那样)?Plus
Money
Times
- Bank 和 Sum 的目的是什么?(现在,这对我来说没有任何意义)
- 我认为
Reduce
方法名称对我来说听起来很奇怪。你觉得这是个好名字吗?(请建议)