为什么现在nodeJs只适合做中间层,Java的地位撼动不了
node或者说js的特性(单线程,异步,弱类型)决定了它比较适合快速的做简单的东西,你可以不用考虑很多底层的东西,不用考虑数据类型转换,完全不用应用服务器,很快就做出一个应用。但是当应用的体积庞大之后,有一些问题就会暴露出来。这里不说效率,单单是代码的可维护性上,就差java很多。相对来说,java限制比较多,语法比较严格,但这些限制决定了java的程序都会有个风格比较一致的外表,比较容易阅读和维护。
所以一般来说,node不会用来实现比较复杂的业务逻辑。面向对象的语言在控制业务上有很强的能力,比如java。
而且,java流行的时间远比node早,国内很多商业公司,包括银行,他们的业务系统都是java实现的。在这方面,这些公司沉淀了很多经验,也投入了很多资源。即使他们的业务比较适合用node,也是会逐步而不是完全替代java。比如,先用node实现路由和渲染。我现在正在做的项目就是类似这种。
但以上都不是不变的,好的node程序员能写出比烂的java程序员更好的应用,这是毫无疑问的。就像我一位同事所说,java能保证程序的底限,因为它本身就有强制性的诸多原则,而且还有面向对象的诸多知识例如设计模式可供参考。但是node,是没有上限的,同时,也是没有下限的。
针对楼主的问题来回答。
1、为什么nodejs为什么只适合做中间层?
不妨换个思维,nodejs去做业务层、数据层会怎样?我用纯nodejs做过应用,发现业务逻辑层太难写了,由于nodejs天生的语言缺陷,复杂的逻辑在碰到一堆callback的时候代码简直没法看,即使用了promise之类的库,也没法完全弥补这个缺陷。大型的网站架构非常注重可维护性,代码可读性低,可维护性自然低了。
2、为什么撼动不了java的地位?
两者的定位本来就不同,为什么要取代呢?两个语言存在不一定要是你死我活的,大型it项目往往是多语言结合的,取长补短,复杂的业务逻辑用java来做,用nodejs处理一些路由映射和参数校验,前端工程师也能部分参与后台工程师的工作,这样项目可扩展性其实更好。