过度依赖框架有什么不好?

来源:互联网 发布:用户行为数据采集 编辑:程序博客网 时间:2024/04/29 04:26
      框架的目的之一就是增加抽象,隐藏细节,提高生产效率。当然了,隐藏了细节也等于隐藏了知识,但现在的编程语言和平台众多,什么都了解做不到也无必要。实用主义的学习方法就是learn as needed,什么地方出问题了,什么地方就进行深入补习和研究。如果一定要吹毛求疵,可能就是刚入门的程序员会被框架宠坏,遇到问题不愿意静下心来深入研究。但这是态度问题,和框架没什么关系。



       使用第三方框架和库遇到坑是必然的,但是可以有解决方案的。如果你说我不使用第三方框架和库,就能避免这些坑吗?不是,就算你不使用框架,坑还是要遇到,而且比不用第三方框架和库可能更加麻烦。在我看来,你不是用第三方框架和库,就是在使用自己开发的框架和库。第三方框架和库有问题,有代码,有文档,有在线帮助;自己框架和库有问题,只有代码,没有文档和在线帮助,如果原开发人员走了,可能都不知道问题出在哪里。所以基于这些原因,我现在编程比较倾向于使用框架和第三方库。

然而单独某一个框架是个时代性很强,竞争激烈,过度依赖的框架话问题会很大。下面谈谈框架问题和解决方案

1. 大版本升级问题
       每个单独框架都是由进化时间线的,当大版本变动时候,升级底层的框架将会变得异常麻烦。第一,你的代码很多是针对现在这个版本代码优化或者是妥协变通的代码,升级后,很大程度的可能性就是这些代码将成为历史遗留问题。第二,如果你项目是大量修改框架内部,那么这样的升级可能会变成你的噩梦。

     大版本升级一定会发生,尤其在语言升级或者是技术升级后,框架升级不可避免。有些框架升级甚至可以说是个新框架了。

       最近最简单的例子是laravel4-5和angular.js版本1-2的升级,改动地方很多。而bootstrap基本上要你重新把所有html代码全部重新写过

2.相似框架的移植
       现在用的框架不再更新了,有更好的框架出现了,那么你的代码就需要移动到新的框架下面了,这个时候,噩梦来了,你针对先用的框架代码,基本上和新的框架代码不兼容,那么等于要重新写一次代码。

我做过把code igniter的代码用laravel重写一遍的事情,那是就是因为框架代码完全不兼容的原因


3.框架的淘汰
       框架淘汰太快,今天火热,1年后就可能没人再提了。比如说jQuery,如今少有人提了,当然还算是很重要,但是当年的yahoo的YUI,如今是无人问津了。又比如php的code igniter原公司停止更新后,也没有人在提了。而如今的框架火热,让人实在是选择困难,生怕使用后,过段时间就不更新了。

4.不同公司,不同项目的框架
      每个公司可能都有自己的技术架构,这家用这个框架,那家用别的框架;甚至不同项目用不同框架。所以太过于依赖某一个框架,那么你的跳槽范围就窄了很多。

      我用过的框架有yui,angular,vue,backbone(js),code igniter, laravel(php), bootstrap(css),都挺好用,然而使用过程中就遇到过以上那么多的问题。

建议:
  1. 项目开始前,要对使用的第三方库和框架做好调查,甚至要有他们开发停止的心理准备和技术准备
  2. 不要面向框架编程,面向通用组件编程:把你的代码写成通用组件,可以在不同项目,不同框架下中直接调用
  3. 面向接口编程,而不是面向细节编程:做一个有开放接口的中间件,封装第三方库api。在项目代码中,使用中间件接口,千万不要直接使用第三方库的api。这样第三方库过期了,可以马上换库而保证项目正常使用。
  4. 学习通用的编程技术,不要学某个技术的细节:细节靠搜索即可,把框架的通用技术和知识学好,这样不同框架都可以快速上手,快速开发了。
  5. 短期项目,可以不考虑框架升级;长期项目要好好考虑框架升级的情况。
  6. 写unit test:在框架升级和换框架时候,进行单元测试,保证其在不同环境下可以正常工作

再说说开发一个长期项目过程中,选择第三方框架的一些原则:

  • 有LTS版本(长期维护版本)
  • 开发组织是可以保证长期的:社区型开发,超级公司主导的开发(google,facebook)
  • 有代码覆盖100%的单元测试
  • 有良好的技术支持,包括:良好文档,在线技术问答,有好的官方网站,bug的快速报告和快速修复
  • 社区大小,生态良好:使用人员多,插件开发人员多的
  • github上星星多的,下载量大的(可以作为参考,却不是决定因素)

做好以上几项,你就可以很好的避免大部分所谓过度依赖框架的问题了。


0 0
原创粉丝点击