1

我有一个名为 product 的类,我的问题是我以各种方式处理产品,通过产品列表、产品本身以及将产品插入数据库。每个处理不同的属性。

例如,在页面上显示产品将由名称、描述、ID、价格、品牌名称、类别、图像组成,但产品列表仅显示名称、缩略图。每个都有自己的方法,例如,一个会获得前 5 个产品,但另一个只显示一种产品。

我的问题是如何为此创建类,我是为每个产品变体创建一个不同的类,还是创建一个包含每个方法和属性的类,因此将包含一个非常庞大的类。

4

4 回答 4

3
  • 从一个名为 Product 的抽象类开始。

  • 在这个类中拥有所有产品的共同特征/属性/常用方法。

  • 从这个抽象类派生新的产品类型。

  • 使抽象类中的属性/方法虚拟化,因此派生产品类型可以根据产品类型表现出不同的行为。

  • 看看您是否需要派生产品类型显式展示特定行为。在你的抽象类中声明抽象类方法。因此派生类负责实现该行为。

    抽象类产品{

    //成员字段 //方法

    }

     product1:product{
        //product specific implementation
     }
    
     product2:product{
         //product specific implementation
     }
    
于 2012-09-24T14:20:14.673 回答
1

使用具有所有属性的单个 Product 类,并简单地显示在给定情况下所需的属性(数据库字段)。例如,您可以将产品创建为购物车项目:

public class ShoppingCartItem
{
    private int productID;
    private string productCategory;
    private string subCategory;
    private string productName;
    private string productDescription;
    private decimal productPrice;
    private double productWeight;
    private int units;

    public int ProductID
    {
        get { return productID; }
    }
    public string ProductCategory
    {
        get { return productCategory; }
    }
    public string SubCategory
    {
        get { return subCategory; }
    }
    public string ProductName
    {
        get { return productName; }
    }
    public string ProductDescription
    {
        get { return productDescription; }
    }
    public decimal ProductPrice
    {
        get { return productPrice; }
    }
    public double ProductWeight
    {
        get { return productWeight; }
        set { productWeight = value; }
    }
    public int Units
    {
        get { return units; }
        set { units = value; }
    }
    public decimal Total
    {
        get { return Units * ProductPrice; }
    }
    public ShoppingCartItem(int productID, string farm, string productCategory, 
        string subCategory, string productName, string productDescription,
            decimal productPrice, double productWeight, int units)
    {
        this.productID = productID;
        this.productCategory = productCategory;
        this.subCategory = productCategory;
        this.productName = productName;
        this.productDescription = productDescription;
        this.productPrice = productPrice;
        this.productWeight = productWeight; 
        this.units = units;
    }
}

[Serializable()]
public class ShoppingCart : CollectionBase
{
    public ShoppingCartItem this[int index]
    {
        get { return ((ShoppingCartItem)List[index]); }
        set { List[index] = value; }
    }
    public int Add(ShoppingCartItem value)
    {
        return (List.Add(value));
    }
    public int IndexOf(ShoppingCartItem value)
    {
        return (List.IndexOf(value));
    }
    public void Insert(int index, ShoppingCartItem value)
    {
        List.Insert(index, value);
    }
    public void Remove(ShoppingCartItem value)
    {
        List.Remove(value);
    }
    public bool Contains(ShoppingCartItem value)
    {
        return (List.Contains(value));
    }
}
于 2012-09-24T14:03:41.133 回答
0

每个场景都需要不同的模型。如果您要持久化一个产品,那么它将是 ProductDto 或 PersistableProduct。或者您可以使用诸如 Shopping.Dto.Product 之类的命名空间来限定它

如果您要查看产品,那么我会想到 ProductViewModel。如果您使用的是 ASP.NET MVC,则模型目录将包含一个名为 Product 的类,该类仅具有有限的页面显示属性。

Bob 大叔在他的博客中提倡 DTO 和 Business Objects 是不同的东西。
http://blog.cleancoder.com/uncle-bob/2019/06/16/ObjectsAndDataStructures.html 我们在选择类的时候还需要注意设计。

于 2019-08-04T15:13:39.760 回答
-2

设计一个具有应用程序所需的所有属性/方法的类。

于 2012-09-24T14:06:31.890 回答