2009-06-03 13 views
0

Ich versuche derzeit, eine Anwendung umzuformen, die viele Orte enthält, an denen Listen oder Datentabellen mit Gesamt- oder Durchschnittswerten am Ende und prozentualen Änderungen oder kumulativen Gesamtsummen angezeigt werden Aufzeichnung.Modellierung von Sammlungen mit zugehörigen Statistiken und NHibernate

In der Regel wird die Sammlung als eine Liste von Objekten modelliert und die anderen Daten werden im aspx-Code hinter (yuck) berechnet. Ich möchte diese Logik in mein Modell übertragen, um es testbar und wiederverwendbar zu machen.

Das Beste, was ich mir im Moment vorstellen kann, ist eine Sammelklasse zu erstellen, der alle diese Objekte hinzugefügt werden. Diese Auflistung kann dann Eigenschaften bereitstellen, die verschiedene Statistiken darstellen. Gefällt mir:

public class DailySales 
{ 
    public DateTime Date { get; set; } 
    public decimal Value { get; set; } 
} 

public class SalesCollection 
{ 
    public List<DailySales> Sales { get; private set; } 

    public decimal TotalSales 
    { 
     get { return Sales.Sum(x => x.Value); } 
    } 
} 

Dies funktioniert gut für Summen. Aber jetzt muss ich eine% Änderung für jeden Tag berechnen. Ich kann das zu den täglichen Verkäufen hinzufügen und es dann von der Sammlungsklasse aktualisieren, die auch ziemlich gut zu funktionieren scheint. Außer es macht es mit Nhibernate ziemlich schwierig, da es keine Möglichkeit gibt, Ereignisse aus der Sales-Liste auszulösen, an die sich die SalesCollection anhängen und die anderen Statistiken berechnen kann.

Ich denke, was ich suche, ist eine saubere Art der Modellierung dieser Art von Daten, die leicht auf Nhibernate persistiert werden kann.

Antwort

1

Ich würde Ihre Sammlung in Ruhe lassen, und belichten ist als so etwas wie dies

private IList<DailySales> _dailySales; 
public IEnumerable<DailySales> DailySales 
{ 
    get 
    { 
    return _dailySales; 
    } 
} 

und dann nur Erweiterungsmethoden für IEnumerable erstellen, die Ihre Berechnungen tun.

public static decimal CalculateSomething (this IEnumerable<DailySales>sales) 
{ 
    return {your calculation here} 
} 
Verwandte Themen