为什么我们无法写出真正可重用的代码?
作者 | Daniel B. Markham 译者 | 王者 策划 | 万佳 为什么实现组件可重用性如此之难? 几周前,Uwe Friedrichsen 在他一篇博文中提出一个这样的问题: ……可重用性是软件的制胜法宝:每当一个新的架构范式出现,“可重用性”就成了是否采用该范式的一个核心考虑因素。业务通常会这样认为:“转向新范式在一开始需要多付出一些成本,但因为可重用,所以很快就会从中获得回报”……但简单地说,任何基于可重用的架构范式从来都不会像承诺的那样,而且承诺总是无法兑现…… 他例举了 CORBA、基于组件的架构、EJB、SOA 等例子,然后就问微服务是否会带来不一样的结果。 为什么可重用性的承诺总是无法兑现?为什么我们无法写出真正可重用的代码? 这些都是很好的例子,Friedrichsen 很好地解释了为什么实现可重用性是如此困难。然而,我相信,他忽略了关键的一点:经典的面向对象编程(OO)和纯函数式编程(FP)在可重用性方面会有截然不同的结果,因为它们基于不同的假设。 我们来做个实验,分别用 F# 和 C# 以 FP 和 OO 的方式来实现“FizzBuzz”游戏。 首先是 F#: let (|DivisibleBy|_|) by n = if n%by=0 then Some DivisibleBy else None let findMatch = function