如何在OOP中建立类似银行的账户?

时间:2010-12-16 22:39:16

标签: c# wpf oop modeling

我正在使用WPF构建一个现金管理软件用于学习目的,我在设置现金账户时遇到了一些麻烦,这样我就可以在每次交易后看到余额。

以下是我现在所拥有的摘要版本:

帐户类:

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

类别类:

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

交易类:

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; }
}

我想要实现的是,仅使用WPF绑定功能,填充数据网格并查看给定日期间隔和帐户的以下数据:

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

我希望能够选择“所有帐户”选项,并在余额栏中查看所有帐户余额的总和。

到目前为止,代码工作正常,但我没有数据网格中的Balance字段,也没有看到一个优雅的方式来模拟这个,我需要你的帮助guyz!

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:3)

当我这样做时,我倾向于简单地使用交易和期刊(期刊是交易的集合)。您有期刊,以便您可以撤销一组交易。

我的交易表往往是这样的:

  • 类型(CR / DR)
  • 帐户1
  • 帐户2
  • 金额
  • 添加日期

然后你基本上有一个非常灵活的系统。每个操作都可以反转,CR / DR意味着方向,您可以通过拥有不同的帐户和帐户类型来管理所有资金。您可以根据帐户缓存帐户的当前值,如果需要,可以从日记帐中重新计算。

- 编辑:

就运行平衡而言,如果不清楚,我会在账户表中有一个字段,例如“CurrentBalance”,并通过触发器(或通过常见的代码内,可能排队)情况进行调整,取决于各种其他因素。关键是你在“交易”事件上更新它,你不会每次都计算它。

答案 1 :(得分:1)

运行余额是您的关键问题。它不属于任何地方的模型。您需要的是一个名为 ViewModel 。搜索WPF实现中常见的 MVVM Model-View-ViewModel 模式。

基本上,您需要创建一个专门的Transaction类(可能称为RegisterTransaction),其中包含每个事务的运行余额字段。您需要为每笔交易计算它。从那里,使用WPF绑定到您的RegisterTransaction对象。