2011年第一篇文章:框架选择的7个原则


当您开发任何应用程序时,您需要选择各种工具、库和框架来集成到应用程序中。在某些情况下,选择最受欢迎和最受尊重的工具可能是一项非常简单的任务。然而,这种情况并不常见。在大多数情况下,有几种工具可以满足您的基本需求,它们都有自己独特的问题。问题就变成了,你如何在各种选择中做出选择?我有talked about this concept before,但这是很久以前的事了,而且侧重点略有不同。所以,今天我给你这些新的和改进的框架选择的7个原则。

需要哪些功能?

在你开始任何选择过程之前,你需要一些标准。假设我们忽略价格,您仍然需要确定框架是否适合您的使用。您需要哪些功能来抵消集成成本?这应该只是一个最低要求列表,否则你将总是选择“厨房水槽”框架,不管它是否最合适。举个例子,看看一个xml解析器库。它应该能够创建一个DOM并返回格式良好的错误列表。如果你使用DTDs,您会将DTD验证作为一项要求。然而,这并不意味着解析器需要支持Xsd,因为您并不真正需要这个特性。

与其他工具、框架或库有任何不兼容吗?

尽管框架看起来或听起来很酷,但它是否与您已经在使用的其他库不兼容?这种情况经常发生在JavaScript处理各种组件时的世界。例如,您可以使用Prototype作为你的JavaScript框架,但是当你寻找嵌入的超文本标记语言编辑器时,你需要检查它们是否与你的原型的特定版本兼容。我在以前的工作中研究过这个例子,由于我们使用的原型版本的“问题”,其中一个编辑被删除了。值得庆幸的是,不兼容性通常被记录下来,有时一个更新的或计划好的版本可能会纠正这个问题。

它的可扩展性和可定制性如何?

对于任何解决不仅仅是一个小问题的框架,您都需要以某种方式对其进行定制或扩展。这可以在Java中通过使用接口来实现。如果我们回到XML解析器的问题,我可以创建一个自定义的错误处理程序类来实现一个特定的接口,并将其提供给解析器。这种类型的定制相当简单,应该可以在大多数框架中使用。另一种类型的扩展是插件的使用。一个插件对于每个应用程序的定义是不同的,但是通常你把你的代码放到一个预定义的位置。例如,一些嵌入的超文本标记语言编辑器允许你将JavaScript代码放到一个目录中。该代码必须符合规范,就像Java接口一样。插件是一个有趣的模型,因为它们允许你创建原始框架或应用程序中没有的特性。这种类型的扩展有很大的力量,非常理想。

它有多成熟?

有一个interesting post on CodingHorror这解释了热/疯狂的规模。你所看到的围绕新技术的宣传周期应该应用到热门/疯狂的规模上,以确定某样东西是否真的适合使用。一个很好的例子是基于Java的网络框架和NoSQL产品。网络框架已经存在多年,并且非常稳定。NoSQL目前是一个非常热门的产品领域。有很多工具正在被构建,它们都有不同的假设和期望。任何工具都可能存在稳定性或一致性问题,因为您可能没有按照设计的目的使用这些工具。这就是热/疯狂标度有用的地方,如果应用程序表现得太疯狂,那么它有多热并不重要。

你能快速原型化一些东西来确定易用性吗?

大约两个月前,I wrote about experimenting with new technology。如果你不是在尝试技术,那么任何时候你需要使用新工具的时候,在学习这个工具上会有很大的努力。你可以做的一件事是用所有的工具来模拟一个更简单的问题,一天就可以完成。你需要设置一个时间限制,因为这个想法是为了确定使用这些工具有多容易。通过给所有的工具相同的时间,您可以在框架中获得相对简单和高效的概念。原型也有助于确定工作风格是否适合你的环境。即使是最好的工具也可能需要您的团队不知道的脚本语言,这增加了使用它的隐性成本。

我在哪里可以得到帮助?

成熟的框架总是比新的竞争对手有更多的帮助。社区论坛、邮件列表、博客,甚至像StackOverflow提供丰富的信息。如果论坛或邮件列表上没有什么活动,一定要查看StackOverflow,了解与您正在研究的框架相关的问题数量。在学习新工具的过程中,找到帮助或示例代码是极其重要的。查看博客也很有帮助,因为它告诉你谁在谈论框架。如果只有一小部分不知名的博客在谈论它,那么这个框架可能太新,或者只是没有被采用。

有用的附加功能?

额外的特性,也就是你不需要但在框架中可用的特性,总是很有趣,但不应该是你选择一个工具而不是另一个工具的主要原因。你应该选择一个框架,可能还有其他原因,但是如果两者相当相似,额外的特点可能是打破僵局。回到XML解析器的例子,您只需要DTD解析和验证。如果两个框架都有你需要的功能,也许你会选择一个XSD对不符合的进行验证。这可能是有意义的,尤其是如果你认为你可能在未来使用这些功能。然而,不要过于迷恋功能的广度,因为它会导致你选择一个过于复杂的框架。

有趣的是,这些相同的原则可以用来构建你自己的产品或框架。记住这些目标将有助于您的产品被采用,就像当前流行的框架一样。