2010-12-16 12 views
3

Ich baue eine Cash-Management-Software mit WPF für Lernzwecke, und ich habe einige Probleme, ein Cash-Konto ordnungsgemäß zu modellieren, so dass ich das Gleichgewicht nach jeder Transaktion sehen kann.Wie modelliert man ein bankähnliches Konto in OOP?

Hier ist eine zusammengefasste Version von dem, was ich habe jetzt:

Ein Kontoklasse:

public class Account { 
    public long Id { get; set; } 
    public string Name { get; set; } 
    public decimal StartingBalance { get; set; } 
} 

der Kategorie A Klasse:

public class Category { 
    public long Id { get; set; } 
    public string Name { get; set; } 
} 

Eine Transaktionsklasse:

public class Transaction { 
    public long Id { get; set; } 
    public DateTime Date { get; set; } 
    public Account Account { get; set; } 
    public Category Category { get; set; } 
    public string Description { get; set; } 
    public decimal TransactionValue { get; set; } 
} 

Wh bei I achive wollen, ist nur die WPF Bindungsfähigkeiten verwenden, ein Datagrid füllen und die folgenden Daten für ein bestimmtes Datum Intervall und Konto anzeigen:

Date  Account  Category  Description  Value Balance 
02/02/10 A1   C1   D1    22.30 230.00 
02/03/10 A1   C1   D2    -30.00 200.00 

Und ich möchte eine Option „Alle in der Lage sein zu wählen Konten "und sehen in der Spalte Kontostand die Summe aller Konten.

Der Code funktioniert bis jetzt gut, aber ich habe nicht das Gleichgewicht Feld im Datagrid kann keine elegante Möglichkeit, dies zu modellieren, ich brauche deine Hilfe Guyz!

Vielen Dank für die Hilfe.

+0

@jim, es ist eigentlich keine "Hausaufgabe", es ist selbstlernend. – Alaor

+0

@jim - Bearbeite niemals eine Frage, nur um das Hausaufgaben-Tag hinzuzufügen. Http://meta.stackexchange.com/questions/10811/homework-on-stackoverflow – Donnie

Antwort

1

Die running balance ist Ihr Schlüsselproblem hier. Es gehört nirgends in das Modell. Was Sie brauchen, heißt ViewModel. Suchen Sie nach dem MVVM oder Model-View-ViewModel Muster, das in WPF-Implementierungen üblich ist.

Im Grunde müssen Sie eine spezialisierte Transaction Klasse erstellen (möglicherweise RegisterTransaction genannt), die ein Feld für den laufenden Saldo für jede Transaktion enthält. Sie müssen es für jede Transaktion berechnen. Verwenden Sie von dort WPF, um an Ihre Objekte RegisterTransaction zu binden.

+0

Ich verwende MVVM bereits. Also würde ich eine Wrapper-Klasse benötigen, die genau wie eine reguläre Transaktion wäre (wahrscheinlich von ihr erben) und ein laufendes Balance-Feld hinzufügen würde? oben! – Alaor

3

Wenn ich dies tue, tendiere ich dazu, einfach mit Transactions and Journals zu beginnen (ein Journal ist eine Sammlung von Transaktionen). Sie haben Journale, damit Sie eine Gruppe von Transaktionen stornieren können.

Meine Transaktionstabelle neigt wie etwas zu sein:

  • Typ (CR/DR)
  • Account1
  • Account2
  • Betrag
  • aufgenommen am

Dann sind Sie Ich habe grundsätzlich ein sehr flexibles System. Jede Operation kann storniert werden, die CR/DR gibt die Richtung vor, und Sie können alle Ihre Fonds verwalten, indem Sie verschiedene Konten und Kontotypen haben. Sie cachen den aktuellen Wert eines Kontos für das Konto und können bei Bedarf aus den Journalen neu berechnen.

- Edit:

Gerade in Bezug auf den Lauf Balance, einhüllen es nicht klar ist, würde ich ein Feld gegen die Konto-Tabelle hat, wie „aktuellerKontostand“ und einstellen, dass über Trigger (oder über eine häufig in Code, möglicherweise in der Warteschlange) Situation, abhängig von verschiedenen anderen Faktoren. Da Sie es bei einem "Transaktion" -Ereignis aktualisieren, berechnen Sie es nicht jedes Mal.

+0

Ich habe nicht gesehen, wie mir das bei der wpf-Anbindung helfen würde, aber das Journal-Konzept gab mir ein Licht darüber, wie ich das umsetzen kann Matt Brunell Vorschlag zu niedrigen Kosten. Danke für Ihre Hilfe! oben! – Alaor

+0

@Alaor: Sorry, das ist mein Fehler, ich habe diesen Teil deiner Nachricht nicht wirklich gesehen, ich habe hauptsächlich auf die Frage bezüglich der Modellierung geantwortet! Froh, dass es irgendwie nützlich war. –

+0

Ich bin kein englischer Sprecher, also manchmal verschwende ich viele Wörter und kann nicht sagen, was ich will, Lauf Balance ist mein Problem, ich wusste nicht, wie es hieß. lol. Danke noch einmal. – Alaor

Verwandte Themen