编者按:本文作者Tomas是F#语言的专家以及导师、计算机科学家,曾出版过有关F#的教程。本文重点介绍了如何设计组合化的库以及如何避免在库设计时进行回调。Tomas倡导以库而不是框架的方式进行开发。以下为译文。 框架 VS. 库 框架和库有什么区别呢?两者的主要不同之处在于如何使用它们以及编写什么样的代码。
框架和库之间的区别可用上图表示。框架定义了一个结构,你不得不将其填充好;而库则需要你围绕其提供的结构进行编码。 为什么不建议使用框架?
框架最大最显著的弱点是不可组合。如果你正在使用两个框架,这两者之间往往是很难兼容的;谁包含谁,谁是谁的外延也是不清晰的。 如果是库,情况则有所不同。因为你才是决策人,所以能够同时调用不同的库,虽然这会增加一定的编程复杂度,但至少是能够实现的。
框架另一个大问题是很难进行测试和探索。在F#中,载入一个库并透过不同输入来检查输出和库的运行是很有用的。例如,可以使用Web开发库 Suave来启动一个简单的Web服务器,代码如下: 代码片中首先载入了库,然后以默认方式调用startWebServer。该方式是非常有用的,因为可以让用户尝试不同的参数来对输出结果进行对比。 |