使用此語句
運費是第一項$ 3.99及每個 0.99 $附加項目。
提取以下數據以創建運費模型。
public class ShippingCharge {
public decimal basePrice { get; set; }
public int baseCount { get; set; }
public decimal unitPrice { get; set; }
}
使用來自OP的例子會被填充爲
//Shipping charges are
shippingCharge = new ShippingCharge() {
// $3.99
basePrice = 3.99M,
//for the first item
baseCount = 1,
// $.99 for each additional item.
unitPrice = 0.99M
};
做完這些下面的算法來計算給出一個項目計數運費。
decimal? CalculateShippingTotal(int itemCount, ShippingCharge charge) {
decimal? total = null;
if (charge != null) {
var basePrice = charge.basePrice;
var baseCount = charge.baseCount;
if (itemCount > baseCount) {
var qtyDifference = itemCount - baseCount;
var additionalCost = qtyDifference * charge.unitPrice;
total = basePrice + additionalCost;
} else {
total = itemCount * basePrice;
}
}
return total;
}
以下單元測試驗證算法在計算總運費中的正確性。
[TestMethod]
public void _TotalShipping_For_One_Item() {
//Arrange
var totalQty = 1;
var expected = 3.99M;
//Act
var actual = CalculateShippingTotal(totalQty, shippingCharge);
//Assert
actual.ShouldBeEquivalentTo(expected);
}
[TestMethod]
public void _TotalShipping_For_Two_Items() {
//Arrange
var totalQty = 2;
var expected = 4.98M;
//Act
var actual = CalculateShippingTotal(totalQty, shippingCharge);
//Assert
actual.ShouldBeEquivalentTo(expected);
}
[TestMethod]
public void _TotalShipping_For_Three_Items() {
//Arrange
var totalQty = 3;
var expected = 5.97M;
//Act
var actual = CalculateShippingTotal(totalQty, shippingCharge);
//Assert
actual.ShouldBeEquivalentTo(expected);
}
這個答案的目標具體是如何計算基於OP的運輸成本而不是折扣的小計。這應該很簡單,可以通過計算物品,數量和價格來進行計算。完成後,使用物品數量和費用來計算運費。
僅供參考,您可能需要考慮將其從視圖移到視圖模型中。這是一條業務規則,所以將它捆綁到您的視圖中意味着您只能使用該視圖。您可以使用視圖助手,但由於這是一個業務規則,它可能屬於模型中的方法或單獨的業務邏輯類/等。然後,控制器可以通過提供所需的值來構建視圖模型,而視圖模型只需顯示那裏的內容,而無需執行任何計算。只是一個建議。 – Dave