我正在开发一个(大学项目)项目,由于我是 .Net 新手,我需要一些帮助来了解最适合我需求的方法。
我正在编写一个饮料机,其功能是购买 1 瓶类型(整数类型,0=水,1=橙汁等..)。 现在机器开始时每种类型有 5 个瓶子。我是否应该为机器本身创建一个新的模型类(具有 id、bottle_water_amount 等属性),然后将
DbSet<ATMMachine>
添加到 APIContext
,然后我可以访问 _context.ATMMachines.First()
来获取第一个(也是唯一的)代表这台机器的行。
这个方法看起来不错吗?这是不好的做法吗?我该如何处理这个问题?
谢谢你:)
我给你举个例子。作为一名程序员,您希望在代码中表示事物,就像它们在现实生活中一样。
对于人造事物使用小数、长整型和整数,对于自然事物使用浮点数和双精度数。
所以让我们这样做吧!我们需要一个现金终端,即销售点机器。它将需要保存产品,如果我们想在业务上取得好成绩,我们还需要应用折扣:) 产品将有名称、价格、包装价格、税率,也许还有条形码和类别。
设计完类(我将其包含在 GitHub 中)后,您就可以采用代码优先方法来生成 EF 数据库和上下文。您将在此处更改工厂模式
CreateProduct
和 CreateDiscounts
以执行数据库 INSERT 操作(在 EF 代码中:dbContext.Product.Add(item);
),并将这些类转变为更多的存储库模式。
由于这是一项大学作业,我会自己添加数据库功能,为了获得额外分数,请尝试构建 Winform/WPF 前端或将方法转换为 REST API,并使用 PointOfSaleTerminal 作为控制器,控制台非常适合看看代码是如何工作的,并添加一个免责声明,表明您是基于此代码进行设计的 - 因为该存储库现在是公开的...... https://github.com/MeaningOfLights/CashTerminal
public class PointOfSaleTerminal : IPointOfSaleTerminal
{
private readonly IEnumerable<IDiscount> _discounts;
private readonly List<ProductQuantity> _productItems;
public PointOfSaleTerminal(IEnumerable<IDiscount> discounts)
{
_discounts = discounts ?? throw new ArgumentNullException(nameof(discounts)); // You wont do well in business if you can't discount stock.
_productItems = new List<ProductQuantity>(); // Store ShoppingCart
}
public void AddProducts(IEnumerable<ProductQuantity> productItems)
{
_productItems.AddRange(productItems); // Someone buys an item
}
public int ProductCount => _productItems.Count; // For a FrontEnd you might bind the ShoppingCart to the ProductCount
public decimal SubTotal => _productItems.Sum(item => item.Product.UnitPrice * item.Quantity); // For a FrontEnd you might bind the ShoppingCart to the Total Price
public IEnumerable<AppliedDiscount> GetBasketDiscounts()
{
var discounts = new List<AppliedDiscount>();
foreach (var discount in _discounts)
{
discounts.AddRange(discount.DiscountsApplicable(_productItems));
}
if (!discounts.Any())
discounts.Add(new AppliedDiscount
{
Type = DiscountType.None,
Text = "(No offers available)",
Amount = 0.00m
});
return discounts;
}
}