2012-07-31 60 views
0

我正在阅读http://www.infoq.com/interviews/trelford-functional并尝试了解OO的替代方法。购物篮的功能性方法

Q我看你在GOTOCon上做功能 体系结构,这是什么?我认为所有架构都是面向对象 ?

唉,他们不是;我想强调一下这样的想法,即语言和平台的选择 确实会影响您的架构,而您的想法是 ;如何选择功能语言或体系结构真的可以使系统受益。

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

对于零售系统,您需要跟踪实际完成的事情,以便您可以检测到欺诈行为,这是系统的关键元素之一;所以你这次实际上每增加一个新的值,你都不会改变。

因此,仅仅从我们每天与 互动的最基本的系统之一,功能不可变样式实际上接近您想要的 架构。

如果您将采用更实用的风格与购物篮应用程序,你会怎么想这个问题?例如,你是否还有购物篮对象,而不是改变它的内容,你会创建一个新的东西?

许多THX

回答

2

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

通过不破坏性地更新购物篮,您可以免费获得回滚,撤销和持续。

通过使用更丰富的数据类型,可以减少需要保存的内容,从而减少错误发生的几率。 OK。

+0

好的。 Thx vm。你能解释一下,如果你添加一个物品到篮子里?例如,而不是说增加一个计数器,你会添加一个项目到一个集合或类似的东西?虽然我看不到这会给你一个回滚能力,除非你有时间戳,例如? – 2012-08-01 08:35:32

+1

您将该项目添加到集合中。容器的先前版本将被记录在历史堆栈中。不需要时间戳 - 只需展开堆叠即可。 – 2012-08-01 11:53:17

+0

容器是否负责维护自己的历史? S – 2012-08-01 12:19:31