2013-06-05 111 views
0

我的背景:我是一位剛剛在軟件行業找到工作的畢業生。 問題:我最近在接受一家軟件公司的採訪,並被要求爲顯示2個賬戶的銀行系統繪製UML圖。保存和檢查,他們有不同的計算方式。銀行系統界面設計 - 面試

我的解決方案:我做了一個帳戶類抽象類。
像這樣:public abstract class Account {......} 這個類在其中定義了2個方法deposit()和withdraw(),這對任何賬戶類型都是通用的。 另一種方法CalculateInterest()是抽象方法。

2類保存和檢查哪些擴展賬戶類和實現賬戶類。 例如:公共類儲蓄賬戶擴展{...}

我添加其他類頂過UML像銀行和銀行的位置,但這次沒面試官感到滿意,他希望我能實現整個過程INTERFACES我相當不理解。我嘗試提取相同的信息,但它並不高興採訪者。

任何人在這裏可以分享的任何信息都會幫助我理解設計和進一步如何接近採訪。
我知道他們有很多設計模式,但當他提到特定的接口時,我不確定如何處理這些問題。

+1

看起來好像你有一個非常好的答案,但面試官在他們的帽子有一些蜜蜂... – McGarnagle

回答

2

在正常的銀行業務流程中,您已經給出了正確的答案。然而,對於複雜的銀行業務需求,他們將需要更多的模塊化設計,而這正是界面發光的地方。

在您的底座設計,你是sayint說:

  • 所有賬戶可以做存款
  • 所有賬戶可以做撤櫃
  • 所有賬戶可以CalculateInterest

說與當前的設計,如果要求如何:

  1. 要創建一個類型account即只能deposit。它不能被撤銷,只能關閉(如基於時間的存款)
  2. 要創建一個account類型的只能withdraw。說你deposit一些錢開account的時候,那麼你只能withdraw,並在年底,關閉
  3. 要創建一個類型的account只有CalculateInterest,但不depositwithdraw可以。
  4. 等等

在你的設計,你可以繼承基Account類,並拋出unimplement例外各不支持的動作(存款等)。但是,(請糾正我)違反LSP和冒着運行時異常的風險。

使用接口爲主,需要聲明一些接口:

  • IAccount(這有基本的財產,如平衡,用戶ID等)
  • IDepositable:IAccount
  • IWithdrawable:IAccount
  • 無法關閉:帳號
  • ICalculateInterestable:帳號

那麼對於要求,你可以聲明一個類:

  1. 實施IDepositable,IClosable,ICalculateInterestable
  2. 實施IWithdrawable,IClosable,ICalculateInterestable
  3. 實施IClosable,ICalculateInterestable

這可能是不最簡潔的設計,但應該滿足大部分的銀行業務要求。

+0

也可以有利益計算等單獨實施等一點點的策略..... – Thihara

+0

aaha! !有趣的,非常好的解釋。我確實設法做了一些接近於此的事情,但當然這要好得多。我很困惑在哪裏定義像退出和存款這樣的基本操作?或者所有實現IDepositable和IWithdrawable的類都將擁有它們自己對這些操作的定義? – user2391361

+0

這種設計將需要「繼承構造」來支持可重用的業務邏輯。解釋很長,所以最好在網上搜索它。 – Fendy