2

私は7つのクラスを持っています:

public class Entity
{
   public int Id { get; set; }     
}

public class Product : ????
{
    // Contructor
    public Product()
    {
        Photos = new HashSet<PhotoSource>();
        ProductFeatures = new HashSet<ProductFeature>();
    }

    // Primitives
    public string ProductName { get; set; }
    public string InternalSKU { get; set; }
    public string ModelNumber { get; set; } 
    public string Description { get; set; }
    public int QtyPerUnit { get; set; }
    public double UnitPrice { get; set; }
    public int UnitsInStock { get; set; }
    public int UnitsOnOrder { get; set; }
    public int? ReOrderLevel { get; set; }
    public string Warranty { get; set; }

    // Foreign Keys
    public int SubCategoryID { get; set; }
    public int VendorId { get; set; }

    // Navigation Properties
    // Classes
    [ForeignKey("SubCategoryID")]
    public virtual SubCategory SubCategory { get; set; }
    [ForeignKey("VendorId")]
    public virtual Vendor Vendor { get; set; }

    // Collections
    public virtual ICollection<PhotoSource> Photos { get; set; }
    public virtual ICollection<ProductFeature> ProductFeatures { get; set; }
}


public class ProductSeasonal : ????
{
    // Primitives
    public int? OffSeasonDiscount { get; set; }
    public DateTime SeasonStartDate { get; set; }
    public DateTime SeasonEndDate { get; set; }
    public int? QtyLimitedTo { get; set; }
}

public class ProductDiscontinued : ????
{
    // Primitives
    public DateTime DiscontinuedDate { get; set; }
    public int DiscontinuedDisount { get; set; }
}

public class Supply : ????
{
    // Primitives
    public String UnitMeasurement { get; set; }
}

public class Part : ????
{
    // Primitives
    public String UnitMeasurement { get; set; }
}

 public class Vehicle : ????
{
    // Constructor
    public Vehicle()
    {
        ExteriorFeatures = new HashSet<ProductFeature>();
        InteriorFeatures = new HashSet<ProductFeature>();
        SafetyFeatures = new HashSet<ProductFeature>();
    }

    // Primitives
    public string VIN { get; set; }
    public int Year { get; set; }
    public int CylinderSize { get; set; }
    public double EngineSize { get; set; }
    public string StyleType { get; set; } //Truck, SUV, Sedan, Convertible, etc
    public string TransmissionType { get; set; }
    public string InteriorColor { get; set; } 
    public string ExteriorColor { get; set; }

    // Foreign Keys
    public virtual int MakeId { get; set; }


    // Navigation Properties
    // Classes
    [ForeignKey("MakeId")]
    public virtual VehicleMake Make { get; set; }

    // Collections
    public virtual ICollection<ProductFeature> InteriorFeatures { get; set; }
    public virtual ICollection<ProductFeature> ExteriorFeatures { get; set; }
    public virtual ICollection<ProductFeature> SafetyFeatures { get; set; }
}

車両、部品、消耗品、および将来の販売品目クラス [例: 衣類] 冗長なプロパティをコード化して大騒ぎせずに追加できますか?

4

3 に答える 3

1

開始する最良の方法は、現在関心のある各項目のすべてのプロパティを書き留めることです。

そのため、どの製品にも価格と一意の ID (SKU 番号) があり、場合によってはバーコードと画像があります。

したがって、これらは何らかの親クラスの開始である可能性があります。

他の製品を見てみると、共通点が見つかるかもしれません。

ジーンズの販売を開始する必要がある場合は、素材やスタイルをリストに記載したい場合があるため、他の衣類が必要になる可能性があるかどうかを確認してください.

ただし、何でも処理できるようにクラスを設計しようとしないでください。

現在持っているものに合わせて設計しますが、必要に応じて新しいプロパティを追加できるように十分に柔軟にします。たとえば、今は qrcode 画像を追加しませんが、後で追加できるほど一般的になる可能性があります。

あなたの質問は、実際にはクラスの設計に関するものですか、それとも最終的にはデータベースの設計に関するものですか?

于 2012-09-16T00:42:11.650 に答える
1

Seasonal と Discontinued を Product に組み合わせ、Product を Entity から継承することにしました。Comments/Word police に感謝します。このサイトには、回答ヘルパーよりも多くの編集者がいることに気づきませんでした。だから、これは私が進める方法です:

     public Product()
    {
        OrderDetails = new HashSet<OrderDetail>();
        Photos = new HashSet<PhotoSource>();
        ProductFeatures = new HashSet<ProductFeature>();
    }

    // Primitives
    public string ProductName { get; set; }
    public string InternalSKU { get; set; }
    public string ModelNumber { get; set; } 
    public string Description { get; set; }
    public int QtyPerUnit { get; set; }
    public double UnitPrice { get; set; }
    public int UnitsInStock { get; set; }
    public int UnitsOnOrder { get; set; }
    public int? ReOrderLevel { get; set; }
    public string Warranty { get; set; }
    // Primitives for Disontinues
    public DateTime? DiscontinuedDate { get; set; }
    public int? DiscontinuedDisount { get; set; }
    // Primitives for Seasonal
    public int? OffSeasonDiscount { get; set; }
    public DateTime? SeasonStartDate { get; set; }
    public DateTime? SeasonEndDate { get; set; }
    public int? QtyLimitedTo { get; set; }


    // Foreign Keys
    public int SubCategoryID { get; set; }
    public int VendorId { get; set; }

    // Navigation Properties
    // Classes
    [ForeignKey("SubCategoryID")]
    public virtual SubCategory SubCategory { get; set; }
    [ForeignKey("VendorId")]
    public virtual Vendor Vendor { get; set; }

    // Collections
    public ICollection<OrderDetail> OrderDetails { get; set; }
    public virtual ICollection<PhotoSource> Photos { get; set; }
    public virtual ICollection<ProductFeature> ProductFeatures { get; set; }
}
于 2012-09-16T00:45:01.207 に答える
0

アプリケーションが成長するにつれて、「関係がある」(構成) の方が「関係がある」(継承) よりも維持しやすい場合があります。これはそれらのシナリオの 1 つであるように見えます。各エンティティが製品クラスを持つように設定できます。また、制御の反転を使用して、これらのエンティティに製品を注入できます。

このリンクは、この記事の根拠を説明しています。

http://www.artima.com/designtechniques/compoinh4.html

于 2012-09-16T07:40:30.230 に答える