产品网站类结构建议

本文关键字:构建 结构 网站 | 更新日期: 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);
    }

抽象方法