使用此语句
运费是第一项$ 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