为什么框架很容易就走上大而全的不归之路?

这是偶五群有人提的问题。


乍一看是,某个框架一出来,没什么人气,只好什么都自己做, 不断补全自己,才可能与已经武装到牙齿的现有框架相较量。比如说jQuery初期,John Resig也自己写了N多插件来充门面。


但细想不是这样的,绝对大多数人还是喜欢一体化的解决方案,要来全栈式;DIY这种东西,东拼西凑不是一般人能玩不得过来,又或者是没这财力要购得这一整套解决方案。 这情况,就相当于jQuery 加 一打插件 与 EXT的区别。


良莠不齐的插件还有许多问题,这个我就不展开了,这也是EXT为什么收费也能活得这么滋润的缘故。


这是还是同质的产品的比较,如果不同质,那更需重头打造一遍了。因为无论用哪套方案,我们都要求它们能满足我们业务开发遇到的各种组件, 插件,控件。。。。


早些年是Prototype.js与jQuery,它们双方以不同的方式来打造自己的世界。Prototype.js与OO走得近一点,能完美把后端那一套搬过来,利用设计模式,迅速堆砌它的UI库。 基于Prototype.js的收费控件异常兴旺。而jQuery则是以DSL面目出现,即便没有控件,也能通过一次又一次爽快的链式操作,把设计稿还原出来。在这世上,新丁与菜鸟总是最多,因此jQuery的份额不断上涨,不断从Prototype.js那边抢走高级开发者,这才渐渐有了一些与媲美Prototypejs UI库的东西出来。 jQuery ui就是走大而全的道路,打败Prototype的大而全的UI框架。


现在时下流行的MV*框架,也基本沿着这老路,来扩张自己的势力。


如果拿人类的历史来比喻。Prototype.js就是奴录社会,夏商周经过八百年的发展,什么东西也有了。 但最后还是被封建社会取代了。jQuery就是好比封建社会。无论是什么社会,人们还是一样要过活,因此必要的生产还要进行。 但依借的工具已经不一样,在远古,青铜珍贵得不得了,多是木器石器;封建时代,青铜就非常普通,但人们更加喜欢用更耐用的铁器。 Prototype.js用到手那一套东西,比如选择器,特性侦测,事件系统,类, jQuery也一样不少,但人家的选择器不只有ID与类与标签,将CSS3那一套都囊括了。 特性侦测也是如此,并划分一个模块来专门判定它们,依靠它们实现门面模式。事件系统比之前所有框架的更庞大,达到1500行的规模,什么自定义事件,IE专有事件,事件代理,事件派发都支持了。 类作为代码组织的一个单元模块,jQuery也在用,但它更喜欢使用IIFE来包装成一个模块。此外,Promise,缓存系统,无new实例化,通过innerHTML批量生成节点是先代所没有的。这世界总是进步的。


MVVM呢?对不起,我不想提MVC。这是资本社会了。双向绑定实现的同步机制,像工业大革命那样极大地提高生产效率,代码的维护性。 由于是大生产,就有大生产的范儿。java早进入这时代了,留下了23个设计模式与分层架构与IoC等经验。了解WPF框架的人都知道,就一个简单的dependent property,就把设计模式这本书里面的模式用掉一大半了。分析WPF框架代码的话,简直就是看一本设计模式的百科全书。这也一一应用到前端MVVM!knockoutjs, avalonjs这些框架里面闪烁着后端长期熔铸的晶华!


并不是说旧的东西就一无是处。当你有了更好的东西,你还愿意用旧的工具吗?在框架发展的早期,还没有大而全,就不得不用旧的生产方式来应付。像angularjs就直接把bootstrap那一套东西包一层,做成它的指令。 小的东西还能包装得好, 像grid这样的大控件,想完全嵌入它的触发机制就处处漏底了。


而且时代不同了,人们利用新的工具重新打造来得更快。在古代,人们打造一把好刀需要长年累月。 现在有了3D打印,坦克一个月就造出来。另从杀伤力来说,后者威力更大。


因此与其说他们是走老路子,不如说它们在重新打造世界,一个崭新的更好的世界!



PS:大而全并不是最佳方式,以微核多插件的方式不断提高暴光率,形成生态圈或许会更好。但马太效应通常不会让新生框架一下得逞(当前王者会圈占大量资源与人才),因此从JAVA几大框架的历史迭代来看,也只有不断膨胀膨胀,直到大家都看到它,才有机会建立自己的生态圈,自己的王国,自己的世界。

原文地址:https://www.cnblogs.com/rubylouvre/p/3364356.html