银行系统界面设计 - 访谈

时间:2013-06-05 02:00:33

标签: design-patterns

我的背景:我最近刚毕业,正在寻找软件行业的工作。 问题:我最近在接受其中一家软件公司的采访时被要求为银行系统绘制UML图,该系统显示2个帐户,例如保存和检查,他们有不同的计算兴趣的方式。

我的解决方案:我将帐户类设为抽象类 像这样:公共抽象类帐户{......} 此类有两个定义的方法:deposit()和withdraw(),这对任何帐户类型都是通用的。 另一种方法是CalculateInterest(),它是抽象方法。

2个类保存和检查哪个扩展了帐户类并实现了Account类。 例如:公共类保存扩展帐户{...}

我添加了其他课程以补充UML,如银行和银行位置,但这并不满足面试官,他希望我将整个过程实施为 INTERFACES ,我完全不理解。我尝试提取相同的信息,但它并不高兴面试官。

这里的人们可以分享的任何信息都将有助于我理解设计和进一步如何接近采访 我知道他们有很多设计模式,但当他提到具体的接口我不知道如何处理它。

1 个答案:

答案 0 :(得分:2)

在正常的银行业务流程中,您已经给出了一个很好的答案。然而,对于复杂的银行业务要求,他们需要更多的模块化设计,这就是界面将发挥作用的地方。

在您的基础设计中,您会说:

  • 所有帐户都可以存款
  • 所有帐户都可以提取
  • 所有帐户均可以计算利息

说出您当前的设计,如果要求如何:

  1. 创建只能account的{​​{1}}类型。它不能撤回,只能关闭(如基于时间的存款)
  2. 创建只能deposit的{​​{1}}类型。假设您在account打开时withdraw一些钱,那么您只能deposit,最后关闭它
  3. 要创建account类型,只能withdraw,而不能accountCalculateInterest
  4. 等等
  5. 在您的设计中,您可以继承基础deposit类,并为每个不受支持的操作(存款等)抛出未实现例外。但是,(请纠正我)违反LSP并冒运行时异常的风险。

    使用基于接口的,您需要声明一些接口:

    • IAccount(这有基本属性,如余额,用户ID等)
    • IDepositable:IAccount
    • IWithdrawable:IAccount
    • IClosable:IAccount
    • ICalculateInterestable:IAccount

    然后对于要求,您可以声明一个类:

    1. 实施IDepositable,IClosable,ICalculateInterestable
    2. 实施IWithdrawable,IClosable,ICalculateInterestable
    3. 实施IClosable,ICalculateInterestable
    4. 这可能不是最简洁的设计,但应该满足大部分银行业务要求。