我真的很喜欢ASP.MVC中的“过滤器”。他们很光彩。
我想为我的业务逻辑使用某种过滤器设计模式。
请考虑以下内容:
var shippingFilterCost = {
"Name": "CalculateShippingCostsFilter",
"InjectedServices": "product, shoppingBasket, CalculateProductShipping",
"MainMethod": function (product, shoppingBasket,CalculateProductShipping) {
var shippingCost = CalculateProductShipping(product.weight, shoppingBasket.locationToShipTo);
product.ShippingCost = shippingCost;
return product;
}
}
var checkIfBuyerHasAVouche = {
"Name": "CheckVoucher",
"InjectedServices": "product, shoppingBasket, CheckVoucherValid,CalculateVoucher",
"EntryCondition": function (product, shoppingBasket, CheckVoucherValid, CalculateVoucher) {
var isVoucherValid = CheckVoucherValid(shoppingBasket.voucherCode);
return isVoucherValid;
// we only go to the 'MainMethod' if entryCondition returns true;
},
"MainMethod": function (product, shoppingBasket, CheckVoucherValid, CalculateVoucher) {
var voucherPrice = CalculateVoucher(shoppingBasket.voucherCode);
product.voucherPriceReduction = voucherPrice;
return product;
}
}
因此,我们将有一个基本产品,该基本产品将通过这两个过滤器添加“信息”。
一个过滤器计算运输成本,另一个过滤器计算凭证。
优势:
1)我们可以很容易地看到其引用在何处使用了“服务”。
2)我们可以轻松跟踪哪些方法可以轻松地更改哪些属性,因为
3)服务只是返回某些内容的纯方法。
4)所有突变都集中在mainMethod内部
5)我们还有一个“ EntryCondition”方法,我们可以将其分开,看看哪些过滤器在运行,哪些过滤器没有在运行。
我不确定如何更好地解释这里发生的事情。显然,这种逻辑非常简单,但是如果我有多个供应商,客户类型等,每个都有自己的逻辑,我们就能看到这种声明性方式如何为我提供帮助。
如果您有更好的主意,我该如何更好地解释这一点,请编辑我的帖子。