我在數量(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