Holen Sie sich alle assoziierten / zusammengesetzten Objekte in ein Objekt (auf abstrakte Weise)

Geschäft:

Ich habe ein Zahlungssystem, bei dem die Zahlung über GiftCoupon, ClubMembershipCard usw. erfolgen kann. Eine Zahlung selbst kann aus mehreren Zahlungskomponenten bestehen

Klasse:

Ich habe eine Zahlungsklasse. Es hat Zahlungskomponenten wie GiftCouponPayment, ClubMembershipCardPayment, CashPayment und so weiter. Jeder Komponententyp erfüllt eine gemeinsame Schnittstelle IPaymentComponent. Ich habe es mit dem Wissen über die vorhandenen Typen implementiert.

Fragen

1) So implementieren Sie diese Funktion in aabstrakt Art und Weise - ohne zu wissen, welche Arten es gibt? Das heißt, es muss für alle Typen funktionieren, die die IPaymentComponent-Schnittstelle implementieren.

2) Wenn dies in LINQ to SQL nicht möglich ist, ist dies in Entity Framework möglich?

3) Ist es Assoziation / Aggregation oder Zusammensetzung, wennLINQ to SQL GiftCouponPayment-Entitäten innerhalb des Payment-Objekts generieren?

Hinweis: Ich verwende LINQ to SQL als ORM. GiftCouponPayment und Payment sind automatisch generierte Klassen, und diese Objekte werden von ORM erstellt. Ich habe diesen Klassen durch die Verwendung von Teilklassen mehr Funktionalität hinzugefügt.

Hinweis: In der Datenbank hat jede PaymentComponent (z. B. GiftCouponPayment) ihre eigenen Eigenschaften (z. B. CouponValue, CardValue usw.). DaherTabelle pro Hierarchie wird nicht gut sein. Wir brauchen separate Tabellen. Gibt es eine Lösung in dieser Zeile?

Hinweis: GiftCouponPayment ist vor dieser Zahlung bereits in der Datenbank vorhanden. Wir müssen das GiftCouponPayment-Objekt mithilfe der vom Kunden bereitgestellten GiftCouponPaymentID identifizieren. Wir müssen nur die PaymentID-Spalte in dieser Tabelle aktualisieren.

Eine undichte Abstraktion bezieht sich auf eine implementierte Abstraktion, mit der die Komplexität verringert (oder ausgeblendet) werden soll, wobei die zugrunde liegenden Details nicht vollständig ausgeblendet werden

LINQ to SQL-Diagramm

REFERENZ:

Entity Framework 4, erben oder erweitern?So wählen Sie eine Vererbungsstrategiehttp://blogs.msdn.com/b/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspxFließende API-Beispiele -http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx

C # -CODE

public interface IPaymentComponent
{
     int MyID { get; set; }
     int MyValue { get; set; }
     int GetEffectiveValue();
}


public partial class GiftCouponPayment : IPaymentComponent
{
    public int MyID
    {
        get 
        { 
            return this.GiftCouponPaymentID; 
        }
        set 
        { 
            this.GiftCouponPaymentID = value; 
        }
    }

    public int MyValue
    {
        get 
        { 
            return this.CouponValue; 
        }
        set 
        { 
            this.CouponValue = value; 
        }
    }

    public int GetEffectiveValue()
    {
        if (this.CouponNumber < 2000)
        {
            return 0;
        }
        return this.CouponValue;
    }
}

public partial class Payment
{
    public List<IPaymentComponent> AllPaymentComponents()
    {
        List<IPaymentComponent> allPayComps = new List<IPaymentComponent>();


        List<GiftCouponPayment> giftCouponPaymentList = new List<GiftCouponPayment>();
        List<CashPayment> cashPaymentList = new List<CashPayment>();

        foreach (GiftCouponPayment g in this.GiftCouponPayments)
        {
            giftCouponPaymentList.Add(g);
            allPayComps.Add(g);
        }

        foreach (CashPayment c in this.CashPayments)
        {
            cashPaymentList.Add(c);
            allPayComps.Add(c);
        }

        return allPayComps;


    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage