产品网站类结构建议
本文关键字:构建 结构 网站 | 更新日期: 2023-09-27 18:32:26
我正在创建一个包含产品和产品类别的产品网站,我创建了以下类:
public abstract class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCode { get; set; }
public int ProductCatagoryId { get; set; }
}
public class DryFruits : Product
{
public decimal WeightInGrams { get; set; }
public decimal RatePerGram { get; set; }
}
public class DryFruitsPacks : Product
{
public string PackName { get; set; }
public decimal PackWeight { get; set; }
public decimal PackPrice { get; set; }
}
我想要一个AddProduct()
的方法,它必须存在于从 product 派生的每个类中,并将该产品添加到数据库中。
public class Product : IAddProduct
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCode { get; set; }
public int ProductCatagoryId { get; set; }
public virtual void Add(Product p)
{
//Save to db
};
}
public class DryFruits : Product
{
public decimal WeightInGrams { get; set; }
public decimal RatePerGram { get; set; }
public override void Add(Product p)
{
//Save to db
}
}
public interface IAddProduct
{
void Add(Product product)
}
Public class SomeClass
{
Product product = new DryFruits()
{
ProductName = "Nut";
WeightInGrams = 0.01;
}
private IAddProduct _saveIt;
_saveIt.Add(product)
}
Public class SomeOtherClass
{
Product product = new Product()
{
ProductName = "Orange";
}
private IAddProduct _saveIt;
_saveIt.Add(product)
}
我一直认为抽象类是一个穷人版本的接口。即使使用上面的代码,它也符合SO要求的目的。
您应该向基本产品类添加一个抽象类。 并在派生类中重写它。
public abstract class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCode { get; set; }
public int ProductCatagoryId { get; set; }
public abstract void Save();
}
public class DryFruits : Product
{
public decimal WeightInGrams { get; set; }
public decimal RatePerGram { get; set; }
public override void Save()
{
//save the product
}
}
派生类。创建派生类(如 DryFruit 或 DryFruitsPacks)时,必须为抽象类中的所有抽象方法提供重写方法。两个派生类中的 AddProduct() 方法都满足此要求。
覆盖国际字段。抽象类中可以有一个实例字段。派生类可以通过基语法访问此字段。
国际无法实例化抽象类。抽象类的重要部分是永远不能将其与派生类分开使用。
public abstract class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCode { get; set; }
public int ProductCatagoryId { get; set; }
public abstract void AddProduct(params object[] arguments);
}
抽象方法