技术开发 频道

框架和库怎么选?这九大因素全都要考虑!

  【IT168 编译】程序员在解决实际问题的时候,通常会采用三种办法,一是使用框架,二是挑选库,三是创建自己的解决方案。

  这三种方法中从头开始创建自己的解决方案有时并不是一个聪明的选择,尤其是某些知名的问题,如果这个问题已经流传了好多年,并且已经存在成熟的工具,创建自定义解决方案就是一项昂贵且耗时的任务;如果这个问题是少有的,那么创建自定义解决方式是值得投资的。

  在本文中,我们将重点关注框架和库,看看它们有哪些优缺点,哪些场景是一定要使用的。在正式开始之前,我们先来正一正框架和库的含义。

框架和库怎么选?这九大因素全都要考虑!

  框架

  框架是一种将用户编写代码保存在一起的编程抽象。软件框架是一个通用的,可重复使用的软件环境,它提供特定的功能作为更大的软件平台的一部分。这有助于开发软件应用程序、产品和解决方案。软件框架包括支持程序,编译器,代码库,工具集和应用程序编程接口(API),汇集了不同的组件以实现项目或系统的开发。框架与库非常相似,但也有一些区别于普通库的特色。

  控制反转:在一个框架中,整个程序的控制流程由框架决定而不是调用者。这与库的工作方式相反,库的控制流程由调用者决定。

  可扩展性:用户可以扩展框架,通常是选择性覆盖; 或者程序员可以添加专门的用户代码来提供特定的功能。

  不可修改的框架代码:框架代码不应该被修改,但它可以接受用户实现的扩展。换句话说,用户可以扩展框架,但是不能修改其代码。

  框架本身提供了一定的控制流程,使用者要做的是提供应用程序业务逻辑的实现,框架会调用它们以减轻对数据库连接,事务,数据传输协议等的考虑。对于上述这些,框架提供了配置端点,使用者不用实例化类,传递配置,分配/释放资源等。

  单元测试:每个项目都应该有测试,测试过程包括执行测试,收集结果,呈现结果,比较测试运行之间的结果等,开发人员不应该浪费时间来实现这些功能。而单元测试框架提供空白点,开发人员可以插入测试,框架将负责其它的测试。

  单元测试框架只是框架的一个简单示例。通常一个框架将会涉及到很多,举个例子,强大的Spring框架包含一个庞大的工具集,用于构建具有事务管理,安全性,批处理操作等的大型应用程序。一个框架可以给一个项目飞的开始 ,通常程序员只需提供几个配置文件(例如DB配置),就可以直接开始实施业务代码。

  

  在现实生活中,图书馆是免费获取信息的地方。但就编程而言,库是一组对象,函数和方法(取决于语言),可以在多个应用程序之间重用和共享。库执行特定的,明确定义的操作。

  通常在编程中遇到特定域的问题时可以创建库。例如没有内置到语言中的操作和数据结构,反向扩展、高级集合等。

  基本上,一个库提供了代码将调用的API。这也意味着你的代码可以控制调用库的功能。这就是框架和库之间的关键区别。使用库时,代码调用库,使用框架时,框架调用代码。

  如何选择?

  在使用框架或库解决棘手的编程问题时,我们需要考虑以下因素:

  团队专长:一个框架通常会给专业知识较低的团队带来好处,为他们提供丰富的功能和发展方式,减少犯错空间,获得更结构化和可读的代码,另一方面,框架比库的学习曲线更陡峭。这意味着即使是一群经验丰富的专业人士,采用陌生的框架来加快开发速度也可能会感到困难。在这种情况下,库可能是一个更好的选择。

  团队规模:框架适用于较小的团队和较紧凑的期限,因为它提供了很多开箱即用的功能。如果所有程序员需要一些数据库的配置文件,那么一个基础框架就可以满足。公开一个文档的REST接口只是几行代码的问题,这使得团队几乎从一开始就可以创造商业价值。

  项目规模:框架倾向于小型项目,对大型项目有所约束,因为在框架的直接控制下难以修改应用程序的流程,但随着项目的增长,他们往往会需要越来越多的具体功能,这些功能有可能不被支持。所以对于小项目而言,框架是非常有益的,但是对于大型项目来说,这些优势就消失了。

  安全性:一个很好的经验是在选择外部工具时,要检查它有多少安全补丁以及严重程度, 尤其是短期的安全补丁。如果一个工具最近有很多安全补丁,那么就意味着安全性不够稳定。

  社区/商业支持:框架/库周围是否有一个活跃的社区或良好的商业支持,可以帮助您快速解决问题?如果是的话,那么这可能是一个不错的选择。

  许可:每个外部工具都附带许可证,必须根据公司政策考虑。有些公司对于使用开源软件有限制,因为它们通常在没有任何保证和责任的情况下提供。

  炒作因素:这也是一个非常重要的考虑。管理者往往倾向于稳定和成熟的工具,因为它们在现实世界中已经成熟和被证明。但这同时也意味着它们是旧的,程序员不喜欢。如果你无法找到任何人来使用它,那么选择一种旧技术就没有任何意义。

  组织政策:也许你的团队想为新项目使用一个新的框架?可是很遗憾,企业已经决定所有的前端代码都只写在React中。

  技术锁定:有些公司会提供与其他框架或库紧密耦合的框架。这种生态系统往往更加稳定,并可以得到更好的支持。但是这些生态系统往往对新的技术和方法支持很慢。在我看来,技术锁定永远不会起作用,但可靠性肯定有吸引力。

  框架和库之间并不是严格的非此即彼的选择,一个项目通常会是框架、库和自定义解决方案的组合。软件工程本身就是一个不同路径达到最终目标的权衡。

0
相关文章