【问题标题】:How to model a banking-like account in OOP?如何在 OOP 中为类似银行的账户建模?
【发布时间】:2011-05-26 20:23:05
【问题描述】:

出于学习目的,我正在使用 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 字段,也看不到对此建模的优雅方法,我需要你的帮助!

非常感谢您的帮助。

【问题讨论】:

标签: c# wpf oop modeling


【解决方案1】:

当我这样做时,我倾向于从事务和日志(日志是事务的集合)开始。您有日记帐,以便您可以冲销一组交易。

我的事务表往往是这样的:

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

那么你基本上得到了一个非常灵活的系统。每个操作都可以反转,CR/DR 暗示方向,您可以通过拥有不同的账户和账户类型来管理您的所有资金。您可以根据帐户缓存帐户的当前值,并且可以根据需要从日记帐重新计算。

-- 编辑:

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

【讨论】:

  • 我不知道这将如何帮助我进行 wpf 绑定,但 Journal 概念让我了解了如何以低成本实施 Matt Brunell 的建议。谢谢你的帮助!起来!
  • @Alaor:对不起,那是我的错误,我实际上没有看到你的那部分信息,我主要回答了关于建模的主题问题!很高兴它有点用处。
  • 我不会说英语,所以有时我会浪费很多话,说不出我想说的话,跑步平衡是我的问题,我不知道它是怎么称呼的。哈哈。再次感谢。
【解决方案2】:

运行平衡是您的关键问题。它不属于任何地方的模型。你需要的是一个ViewModel。搜索 WPF 实现中常见的 MVVMModel-View-ViewModel 模式。

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

【讨论】:

  • 我已经在使用 MVVM。所以,我需要一个包装类,就像一个常规事务(可能从它继承)并添加一个运行余额字段?起来!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 2019-01-30
  • 2014-08-27
  • 2014-06-20
  • 2022-10-24
  • 1970-01-01
相关资源
最近更新 更多