如何在面向对象编程中建模类似银行账户的账户?

4

我正在使用 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

我希望能选择一个“所有账户”选项,并在余额列中看到所有账户余额的总和。
目前代码运行良好,但数据网格中没有“余额”字段,也没有找到优雅的建模方式,需要大家的帮助!
非常感谢你们的帮助。

@jim,这实际上不是“作业”,而是自学。 - Alaor
@jim - 切勿仅为添加作业标签而编辑问题。请参阅http://meta.stackexchange.com/questions/10811/homework-on-stackoverflow - Donnie
2个回答

3
当我开始处理这个问题时,我通常从事务和日志(日志是一组交易)开始。你需要日志以便可以撤销一组交易。
我的交易表格通常像这样:
- 类型(CR/DR) - 账户1 - 账户2 - 金额 - 添加日期
然后你基本上拥有一个非常灵活的系统。每个操作都可以被撤销,CR/DR表示方向,你可以通过具有不同账户和账户类型来管理所有资金。你可以缓存账户的当前值,并且如果需要,可以从日志中重新计算。
-- 编辑:
关于余额运行的问题,如果不清楚的话,我会在账户表格中增加一个字段,如“CurrentBalance”,并通过触发器(或通过常见的代码,可能是排队的)情况进行调整,具体取决于各种其他因素。重点是你在“交易”事件上更新它,而不是每次计算它。

我一开始没看出这会如何帮助我解决 WPF 绑定问题,但“日志”概念给了我一个灵感,让我能够低成本地实现 Matt Brunell 的建议。谢谢你的帮助!点个赞! - Alaor
@Alaor:抱歉,那是我的错误,我实际上没有看到你信息的那部分,我主要回答了关于建模的主题问题!很高兴它有点有用。 - Noon Silk
我不是英语母语者,有时会浪费很多话,无法表达自己的意思,运行平衡是我的问题,我不知道它怎么称呼。哈哈。再次感谢。 - Alaor

1

运行余额是您在此的主要问题。它不属于模型的任何位置。您需要的是称为ViewModel的东西。搜索一下在WPF实现中常见的MVVMModel-View-ViewModel模式。

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


我已经在使用MVVM了。因此,我需要一个包装类,就像一个常规交易一样(可能继承自它),并添加一个运行余额字段?上! - Alaor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接