0

我正在使用映射到我的数据库的实体框架。我有一个 Basket 模型,它可以有许多 BasketItem 模型,并且我有 Promotions 和 Coupons 模型。这是针对电子商务结帐功能的,我只是不明白它是如何工作的,这里是:

因为我的 BasketItems 与 Basket 有外键关系,如果我想在部分类中汇总我的篮子项目的小计,我可以这样做:

        public decimal Subtotal {
        get {
            return this.BasketItems.Sum(pb => pb.Subtotal);
            }
        }

这很有帮助,因为我可以在视图中使用它,传递数据库上下文没有任何麻烦,而且它是 DRY 等。

现在我想将促销或优惠券应用于我的小计,理想情况下我希望它看起来像这样:

        public decimal DiscountedSubtotal {
        get { 
            decimal promotions_discount = 0;
            decimal coupons_discount = 0;
            return Subtotal - promotions_discount - coupons_discount;
            }
        }

但是,如果不在我的数据库中创建一些疯狂和不必要的关系,或者进行一些轻微的黑客攻击以使此功能正常工作,就无法访​​问促销或优惠券。我不知道我应该怎么做才能克服这个问题。

解决方案1:

        public decimal DiscountedSubtotal(DatabaseEntities db) {
        decimal promotions_discount = from p in db.Promotions
                                  select p.Amount;
        decimal coupons_discount = from c in db.Coupons
                               select c.Amount;
        return Subtotal - promotions_discount - coupons_discount;
        }

我不想在我的视图页面中使用它,而且每次我想使用它时都必须通过我的上下文发送。

解决方案2:(未经测试)

    public List<Promotion> Promotions { get; set; }
    public List<Coupon> Coupons { get; set; }

    public Basket()
        : base() {
            DatabaseEntities db = new DatabaseEntities();
            Promotions = db.Promotions.ToList();
            Coupons = db.Coupons.ToList();
    }

一些轻微的黑客攻击可以为我提供促销和优惠券的参考,但我之前在创建新上下文时遇到了问题,我不知道是否有更好的方法可以让我获得理想的 DiscountedSubtotal 属性。

所以总结一下我的问题,我想知道获得 DiscountedSubtotal 属性的最佳方法。

非常感谢和道歉这么长的阅读:)

4

1 回答 1

1

我认为这里的问题是您并没有真正使用连贯的架构。

在大多数情况下,您应该有一个业务层来处理这种逻辑。然后,该业务层将具有类似的功能,CalculateDiscountForProduct()或者CalculateNetPrice()将进入数据库并检索完成业务规则所需的数据。

业务类将与返回数据对象的数据层对话。您的视图只需要它的视图模型,您可以从业务层返回的业务对象中填充它。

一个典型的方法可能是:

public ActionResult Cart() {
    var model = _cartService.GetCurrentCart(userid);
    return View(model);
}

因此,当您应用折扣或优惠券时,您会调用一个方法,_cartService.ApplyDiscount(model.DiscountCode);然后将新模型返回到视图。

您最好学习 Mvc Music Store 示例项目,因为它包含购物车功能和促销代码。

http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-1

于 2012-10-24T17:51:57.017 回答