我在数量(Fowler)类中有一个变体,该类设计用于促进单元之间的转换。该类型被声明为:使用泛型进行重构练习
public class QuantityConvertibleUnits<TFactory>
where TFactory : ConvertableUnitFactory, new() { ... }
为了做到不同单位之间的数学运算,我操作的右侧转换到任何单位的左手边是等效的数量,并做数学题在创建新数量之前的金额(这是一个双倍)。里面一般数量级的,我有以下几点:
protected static TQuantity _Add<TQuantity>(TQuantity lhs, TQuantity rhs)
where TQuantity : QuantityConvertibleUnits<TFactory>, new()
{
var toUnit = lhs.ConvertableUnit;
var equivalentRhs = _Convert<TQuantity>(rhs.Quantity, toUnit);
var newAmount = lhs.Quantity.Amount + equivalentRhs.Quantity.Amount;
return _Convert<TQuantity>(new Quantity(newAmount, toUnit.Unit), toUnit);
}
protected static TQuantity _Subtract<TQuantity>(TQuantity lhs, TQuantity rhs)
where TQuantity : QuantityConvertibleUnits<TFactory>, new()
{
var toUnit = lhs.ConvertableUnit;
var equivalentRhs = _Convert<TQuantity>(rhs.Quantity, toUnit);
var newAmount = lhs.Quantity.Amount - equivalentRhs.Quantity.Amount;
return _Convert<TQuantity>(new Quantity(newAmount, toUnit.Unit), toUnit);
}
... same for multiply and also divide
我需要打字权的具体数量,所以附加运算的一个例子是这样的:
public static ImperialLengthQuantity operator +(ImperialLengthQuantity lhs, ImperialLengthQuantity rhs) { return _Add(lhs, rhs); }
的问题是Quantity类中的详细方法。代码之间的唯一变化是数学运算符(+, - ,*等),所以似乎应该有一种方法将它们重构为常用方法,但我只是没有看到它。
我该如何重构该代码?
干杯,
Berryl
甜蜜的解决方案。谢谢! – Berryl 2010-04-21 15:28:07