为银行模块实现最佳模型

Posted

技术标签:

【中文标题】为银行模块实现最佳模型【英文标题】:Implementing the best model for a bank module 【发布时间】:2017-06-20 08:56:54 【问题描述】:

我正在用 C# 实现一个银行模块,其中包含一个储蓄账户、一个支票账户和一个简易储蓄账户。所有账户都有一个所有者和一个余额,他们都可以取款和存款,但他们不能提取超过余额。到这里,很容易。现在,我们的储蓄帐户有一个新方法 applyInterest 和 checksAccount 一个方法 deductFees 和 easySavinAccount 两者都有。我想到的是使用抽象类Account:

 public abstract class Account

    protected string owner  get; set; 
    //always use decimal especially for money c# created them for that purpose :)
    protected decimal balance  get; set; 
    public void deposit(decimal money)
    
        if (money >= 0)
        
            balance += money;
        
    
    public void withdraw(decimal money)
    
        if (money > balance)
        
            throw new System.ArgumentException("You can't withdraw that much money from your balance");
        
        else balance -= money;
    

这将被所有 3 个类继承。是否有适合以更好的方式实现这一点的设计模式?特别是对于easySaveAccount,组合可能会有所帮助吗?

谢谢!

【问题讨论】:

【参考方案1】:

建议

1.implement separate interfaces declaring the methods applyInterest and deductFees.
2.You have already declared the abstract class Account.
3.Now you can implement these interfaces in your classes for savings,checkings and easy saving account.All these classes should
be implementing the abstract class.

【讨论】:

这是一个很棒的方法!这是四人组的设计模式吗?或者只是一种更好的实现方式? 我是根据 SOLID 设计原则之一的接口隔离原则提出的。你可以从中得到一些想法:codeproject.com/Articles/822791/…【参考方案2】:

我建议创建一个实现IBalance 的类Balance。所有 Account 可能只是将 withdraw\deposit 委托给该类,因此它们没有代码重复,但您可以轻松地围绕它添加一些额外的逻辑(即征税、佣金、添加交易等)

【讨论】:

以上是关于为银行模块实现最佳模型的主要内容,如果未能解决你的问题,请参考以下文章

为银行交易生成 OrderId 的最佳方法是啥?

存储银行数据的最佳数据类型是啥? [复制]

为每个用户创建随机测试问题的最佳方法

案例 | 银行数据建模智能化:一站式机器学习平台赋能业务分析师无编码模型开发

自动化运维的银行最佳实践

“安全自主可控”将成银行分布式架构实施的最佳契机