产品类别结构建议

时间:2014-11-27 19:27:47

标签: c# activerecord

我正在创建一个包含产品和产品类别的产品网站,我创建了以下类:

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(),它必须存在于从产品派生的每个类中,并将该产品添加到数据库中。

3 个答案:

答案 0 :(得分:1)

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要求的目的。

答案 1 :(得分:0)

您应该为基础Product类添加一个抽象类。并在派生类中覆盖它。

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
    }
}

答案 2 :(得分:0)

派生类。在创建DryFruits或DryFruitsPacks等派生类时,必须为抽象类中的所有抽象方法提供重写方法。两个派生类中的AddProduct()方法都满足此要求。

覆盖 Int领域。抽象类可以在其中包含实例字段。派生类可以通过基本语法访问该字段..

内部 无法实例化抽象类。抽象类的重要部分是,您永远不能将它与派生类分开使用。

   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);

    }

Abstract methods