0

我正在阅读http://www.infoq.com/interviews/trelford-functional并试图了解 OO 的替代方法。

问:你看到你在 GOTOCon 上做关于功能架构的演讲,那是什么?我认为所有架构都是面向对象的?

A 嗯,他们不是;我想强调一个想法,即您选择的语言和平台确实会以您的思维方式影响您的架构;选择一种功能性语言或架构如何真正使系统受益。

如果我只是举一个简单的例子,比如我们编写一个零售应用程序,如果你只考虑对象和变异,那么你会认为当你构建一篮子项目时,当你添加一个项目时,你会增加数量,如果有人退回商品或取消商品,你会减少数量,你做错了。

使用零售系统,您需要跟踪实际所做的事情,以便检测欺诈行为,这是系统的关键要素之一;所以你实际上每次都添加新值,你永远不会变异。

因此,仅从我们每天与之交互的最基本系统之一来看,功能不变的风格实际上接近于您想要的架构。

如果您要在购物篮应用程序中采用更实用的样式,您会如何考虑这个问题?例如,您是否仍然有一个购物篮对象,而不是改变其内容,而是创建一个新对象或其他东西?

很多谢谢

4

1 回答 1

2

这将是一个容器数据结构,其不变量对篮子的不变量进行建模(例如,类似袋子的数据类型)。该容器将是持久的,因此您可以透明地回滚到旧版本(以允许用户撤消操作,或保存以供以后访问)。

通过不破坏性地更新篮子,您可以免费获得回滚、撤消和持久性。

通过使用更丰富的数据类型,需要做的记录更少,因此出现错误的机会也更少。

于 2012-07-31T18:17:19.513 回答