1

製品というクラスがあります。私の問題は、製品のリスト、製品自体、データベースへの製品の挿入など、さまざまな方法で製品を処理することです。それぞれが異なるプロパティを処理します。

たとえば、ページに製品を表示すると、名前、説明、ID、価格、ブランド名、カテゴリ、画像で構成されますが、製品のリストには名前とサムネイルのみが表示されます。それぞれに独自の方法があります。たとえば、1 つは上位 5 つの製品を取得しますが、もう 1 つは 1 つの製品のみを表示します。

私の質問は、このためのクラスを作成する方法です。製品のバリエーションごとに異なるクラスを作成しますか、それともすべてのメソッドとプロパティで構成されるクラスを作成するので、非常にかさばるクラスで構成されます。

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 という名前のクラスが含まれ、ページ表示用の限られたプロパティのみが含まれます。

ボブおじさんは、ブログで DTO とビジネス オブジェクトを別のものとして提唱しています。
http://blog.cleancoder.com/uncle-bob/2019/06/16/ObjectsAndDataStructures.html クラスを選択する際には、設計にも注意を払う必要があります。

于 2019-08-04T15:13:39.760 に答える
-2

アプリケーションで必要になるすべてのプロパティ/メソッドを備えた 1 つのクラスを設計します。

于 2012-09-24T14:06:31.890 に答える