【问题标题】:Product Class Design产品类设计
【发布时间】:2012-09-16 00:11:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:
    • 从一个名为 Product 的抽象类开始。

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

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

    • 将抽象类中的属性/方法设为虚拟,所以 派生产品类型可能会表现出不同的行为,具体取决于产品类型。

    • 查看您是否要求派生产品类型明确展示 具体行为。在你的抽象类中声明抽象类方法。因此派生类负责实现该行为。

      抽象类产品{

      //成员字段 //方法

      }

       product1:product{
          //product specific implementation
       }
      
       product2:product{
           //product specific implementation
       }
      

    【讨论】:

      【解决方案2】:

      使用具有所有属性的单个 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));
          }
      }
      

      【讨论】:

        【解决方案3】:

        每个场景都需要不同的模型。如果您要持久化一个产品,那么它将是 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 我们在选课时也需要注意设计。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2017-02-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-27
            • 1970-01-01
            • 2016-05-08
            相关资源
            最近更新 更多