设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

函数式语言库模式:框架是魔鬼?:

2015-3-10 22:50| 发布者: joejoe0332| 查看: 2228| 评论: 0|原作者: Tomas Petricek's blog|来自: CSDN

摘要: 本文作者Tomas是F#语言的专家以及导师、计算机科学家,曾出版过有关F#的教程。本文重点介绍了如何设计组合化的库以及如何避免在库设计时进行回调。Tomas倡导以库而不是框架的方式进行开发。以下为译文。 ...


  • 使用多重抽象逻辑

请再看看前述的Game例子,虽然低阶抽象给予了充分的控制权,但是很多时候,我们希望写出的游戏是同时具备重绘和更新功能的。

这实现起来也不难,只需把某些部分作为参数使用:

startGame抽象实现了在初始化时把两个函数作为参数使用。Update函数进行状态刷新,draw函数使用DrawingContext重绘状态。这样一来,我们的例子可变为4行代码:

因此只要仔细阅读startGame的代码,按需对其进行改动,便可实现全权控制。对比于建基于一个脆弱库之上的程序,这种方式难道不更稳定可靠吗?

  • 设计可组合的库

对于库来说,可组合属性是我们选择它而不是框架的原因之一。例如FsLab,这是一个用于F#的数据科学库(包括Deedle,Math.Net Numerics),以单个脚本的方式链接呢其他的库(源代码)。

两个简单的例子是矩阵和框架的互转Matrix.toFrame,Frame.toMatrix。

该转换操作起来是很简单的,因为Deedle框架和Math.Net矩阵都能转化为一个2维数组,所以通过数组可方便地实现两者的互转。因此,即使是很复杂的库,我们都应该为用户保留足够的库合成权以实现更强大的功能(或者改写)。

写在最后

本文着重从可组合和避免回调方面对库和框架进行比较。进一步说,框架模式不仅存在于软件,在日常生活也是经常遇到的。例如参团游,从一开始,交通、住宿、游玩行程等都已经被固定了;而自由行则类似于库的组合,任何细节都需要亲力亲为,从而实现全权控制。虽然参团游很方便,但是对于我,特别是软件开发,我还是更倾向于我的地盘我做主!

酷毙

雷人
1

鲜花

鸡蛋

漂亮

刚表态过的朋友 (1 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部