-4

私はasp.netプログラマーで、2つのアプリケーションがあります。1つはeBayサイトのようなeコマースアプリケーションのようなもので、もう1つはbigbazzarや本屋のようなストア管理システムのような管理です。

今、私は自分のプロジェクトにインターフェースと抽象クラスを実装したいと思っていました。抽象クラスとインターフェースについて読み、回転的に使用する方法を知っています。しかし、私のアプリケーションに関連する両方の実世界または実際の例を探しています。 eコマースとストア管理の場合)インターフェイスと抽象クラスが美しく使用されているサンプルのWebeコマースと管理をたくさん検索しました。eコマースとストア管理アプリケーションで使用されるインターフェイスと抽象クラスの使用方法を教えてくれる人はいますか?

抽象クラスとインターフェースが使用されている関連する(つまり、ecommとストア管理)アプリケーションまたはプロジェクトを共有できると便利です。そのため、関連性があるため、プロジェクトと簡単に関連付けることができます。

4

1 に答える 1

1

あなたの質問は非常に広く、コメントで@doogleが述べているように、抽象クラスとインターフェースは必ずしも特定のタイプのプロジェクトに結び付けられているわけではなく、あなたの設計に基づいています。

eコマースまたはストア管理アプリケーションの設計を知らなければ、具体的なヘルプを提供することはできませんが、以前の質問の1つを読むと、抽象クラスとインターフェイスがどのように役立つかを理解しようとしているように見えます。あなた、それでここにあなたを正しい方向に向けるかもしれない何かの基本的な例があります。

架空の店舗には何千もの異なる製品があり、アプリケーションでそれらを追跡したいと考えています。メーカー、価格、部門、数量など、すべての製品に共通するものがあることは明らかですが、特定の製品にのみ適用される可能性のある情報もあります(衣類にはサイズがありますが、DVDにはありません)。

解決策はProduct、すべての製品に共通であるが、各クラスがインターフェースを実装し、独自のプロパティを追加できるようにするインターフェースを作成することです。これで、すべての製品クラスに少なくともこれらの共通メンバーが含まれることを保証できます。

これが架空の製品インターフェースです。

public interface IProduct
{
    decimal SellingPrice { get; set; }
    decimal StoreCost { get; set; }
    int QuantityOnHand { get; set; }

    string Manufacturer { get; set; }
    string DepartmentName { get; set; }

    decimal CalculateProfit();
}

次に、を実装する抽象クラスを作成できますIProduct。これは、実装するだけでなく、フィールドIProductを追加する衣料品ですSize

public abstract class ClothingProduct : IProduct
{
    public string Size { get; set; }

    public decimal SellingPrice { get; set; }
    public decimal StoreCost { get; set; }
    public int QuantityOnHand { get; set; }
    public string Manufacturer { get; set; }
    public string DepartmentName { get; set; }

    // by marking CalculateProfits abstract, you can let every class that inherits
    //  from ClothingProduct decide how to calculate the profit based on the selling
    //  costs of that product
    public abstract decimal CalculateProfit(); 
}

ClothingProductクラスができたので、ストア内のいくつかのアイテムのクラスを作成できます。靴とシャツのクラスは次のとおりです。

public class Shirt : ClothingProduct
{
    public override CalculateProfit()
    {
        return this.SellingPrice - this.StoreCost - this.CalculateSellingCosts();
    }

    private decimal CaclulateSellingCosts()
    {
        // some code that would let you calculate the selling costs and
        //  overhead costs associated with this specific product
    }
}

public class Shoes : ClothingProduct
{
    private const decimal commissionRate = 0.05;

    public override CalculateProfit()
    {
        return this.SellingPrice - this.StoreCost - this.CalculateSellingCosts() - this.CalculateCommission();
    }

    private decimal CaclulateSellingCosts()
    {
        // some code that would let you calculate the selling costs and
        //  overhead costs associated with this specific product
    }

    private decimal CalculateCommission()
    {
        return this.SellingPrice * commissionRate;
    }
}

結局のところ、ShoesShirtは両方ともIProducts継承し、そこからClothingProductを実装するためIProductです。

ストア全体で他の製品の他のクラスまたは抽象クラスを作成できますが、実装している限り、のIProduct一部であるすべてのプロパティを持つことを保証できますIProduct

これが役立つのは、すべてが実装されているため、インターフェイスタイプのコレクションを作成し、それにすべての製品を追加することもできます。IProduct

// a hypothetical method that grabs everything  (maybe from a database)
List<IProduct> products = GetAllProducts(); 

// this query would give you the total number of items in your inventory
var totalItems = products.Select(quant => quant.QuantityOnHand).Sum();

// and this would calculate the total value of the products based on the store's cost
var totalCost =  products.Select(quant => quant.StoreCost).Sum();

2つのクエリは、データベースでこれを行うのと同じくらい簡単な例ですが(everythignが格納されている場合)、関連するすべてのアイテムを単一のインターフェイスに結び付ける方法の例を示すために行いました。助けられる

于 2012-05-10T14:37:51.780 に答える