Scala 函數響應式編程: 靜態類型 (Static Types)

2016.12.3,  北京, Ken Fang

函數響應式編程爲使函數內的代碼更加的強壯, 便需在代碼編譯的階段時, 就要能確定傳入函數的參數類型, 是符合領域模型中的商業規則。也就是說, 藉由編譯器形成一過濾器; 只讓符合領域模型中商業規則的參數類型, 能傳入到函數中。

舉個簡單的例子:

假設, 只有 saving account 能有利息的收入, 而checking account 便沒有利息的收入。

Scala 藉由靜態類型 (Static Types) 的實現的方式, 使得編譯器形成一過濾器; 只讓 saving account 的參數類型, 能傳入到函數中, 進行利息的計算, checking account 的參數類型, 便會被過濾掉。

trait Account {

  def number: String

  def name : String

  //...

}

case class CheckingAccount(...) extends Account

 

trait InterestBearingAccount extends Account {

  def rateOfInterest: BigDecimal

}

case class SavingsAccount(...) extends InterestBearingAccount

case class MoneyMarketAccount(...)extends InterestBearingAccount

 

def calculateInterest[A <: InterestBearingAccount](account: A, period: DataRange) = {

 

}

參數類型 A 必需是 InterestBearingAccount 的 subtype; 所以, 只要不是 InterestBearingAccount 的 subtype 的 account, 便不能傳入到函數 calculateInterest 中, 去計算利息。 

也就是說, 函數 calculateInterest 便只需專注在如何實現利息的計算。而將商業規則的校驗; 只有 saving account 纔能有利息的收入; 交由編譯器去處理。所以, 我們便也不需給函數 calculateInterest 寫測試代碼; 爲了校驗所傳入的 account 是否爲 saving account ?

發佈了180 篇原創文章 · 獲贊 18 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章