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 ?

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏圣杰的专栏

eShopOnWeb 知多少

eShopOnWeb是基于ASP.NET Core构建,官方创建这样一个示例项目的目的,我想无非以下几点:

921
来自专栏腾讯开源的专栏

别小看 Phx 这几位剑客!他们可是微信强大的支持后盾

三位武林高手:轻便简洁的 PhxRPC 框架,基于 Paxos 协议的多机状态拷贝类库 PhxPaxos 以及分布式数据库服务 PhxSQL 。下面,我们将深入...

2.1K2
来自专栏三木的博客

Kobject浅析

面向对象的思想的确在应用软件的开发中颇具优势,它让一个个纯逻辑的函数和数据变成了一个个有生命的个体。鉴于性能的考虑,系统软件的实现(例如linux kernel...

1668
来自专栏非著名程序员

理解RESTful架构

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high ...

17310
来自专栏阮一峰的网络日志

理解RESTful架构

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high ...

4135
来自专栏一个会写诗的程序员的博客

编程范式 (Programming paradigm)

范,模范、典范也。范式即模式、方法。常见的编程范式有:函数式编程、程序编程、面向对象编程、指令式编程等。

1391
来自专栏进击的程序猿

The Clean Architecture in PHP 读书笔记(一)

框架是非常好的,可以帮助我们快速的开发,但是前期的学习成本往往很高,特别是如果想要深入理解框架,需要花费大量的经历。

693
来自专栏阮一峰的网络日志

几种计算机语言的评价(修订版)

编程新手都有一个同样的问题:"我应该学习哪一种语言?"。 《Unix编程艺术》(Eric Raymond著)第十四章,对各种语言进行了评价,正好可以用来回答这个...

3918
来自专栏前沿技墅

超媒体:将客户端服务端分离进行到底

2017 年年末,就职小米的一位前同事送了我一枚 F 码,我用它抢购到一枚小爱音箱。我满怀期待地装上“小爱同学”,希望能够通过她用语音控制所有小米产品。但我失望...

862
来自专栏Android机动车

Java 基础(一)——重新理解面向对象

如何利用对象完成真正有用的工作呢?必须有一种办法能向对象发出请求,令其做一些实际的事情。接口就是对一个对象的行为进行规范,使对象具有做某些事情的能力。

561

扫码关注云+社区