像Laravel框架这么强大了,为什么我们还需要Spring MVC这类J2EE框架来开发网站?
时间:2023-11-25 09:06:01 | 来源:网站运营
时间:2023-11-25 09:06:01 来源:网站运营
像Laravel框架这么强大了,为什么我们还需要Spring MVC这类J2EE框架来开发网站?:那么多评论里大部分人压根都没有用过laravel,完全是出于对PHP的偏见进行评论。PHP只能写CMS博客?大哥你确定你真的写过PHP?
我觉得这个问题我最有资格回答, 我是PHP出身,从上大学到读研项目就一直从事PHP WEB方向。也学过Python和Django,做网站进行一些CRUD操作,开发也很快且优雅。但是做企业级应用跟laravel比还是稍逊风骚。
我在保险公司也项目,业务逻辑算是很长的了吧,用的是Laravel,。第一次接触真的觉得这东西很NB,标准的MVC和面向对象架构,最新的API设计理念。安全认证,模板,Session,ORM, 路由甚至第三方的消息发送,在线支付,邮件系统... 所有的模块框架都帮你拼接配置好或者也就是artisan一个命令行的事情解决,从来都不需要费心考虑底层的东西,专心写代码。这样开发真的很美丽。
后来业务量上去,再加上用户需求也上来,需要不停修改,更新代码,有时候还需要考虑算法的问题。整个项目变得越来越笨重,而且一些地方很难根据自身情况私人订制。
然后开始决定转JAVA,因为公司需要用到一些PDF文件的操作,PHP没有像Java的Pdfbox和Itext那种庞大的库,而且据说J2EE或者Spring开发的企业级项目十分稳定(反正招聘网站上大公司大多招JAVA岗位,工资一般也比同级别PHP的要高,不过技术要求看起来都很老)。刚开始的时候,头都要炸裂了,各个模块都需要自己配置,而且不得不说laravel的文档真的非常好,比spring清晰地太多。而且开发的过程,越来越觉得就框架设计而言laravel要先进很多。但是随着学习的深入Spring,IOC, AOP, 依赖注入,对我编程思想的启迪很大。不过对于项目的开发并没有卵用,就以API为例,我只是想简单的返回一个json对象,你spring还要在那造个Bean,又要用各种helper class跟annotation,人家laravel直接return变量,不管你是对象也好,数组也好,自动帮你转换成json有木有。而且等我配置好各种spring的xml文件,我的PHP项目都已经做好了,可以下班回家吃饭了。laravel开发真的很快很舒服,从来没见过像laravel里dd()这么牛逼的debug函数,更不用说本身apache比tomcat要方便的太多。
也许上升到淘宝那种级别的应用,实现业务逻辑与底层的分离,spring这种框架才能发挥它的优势。但是仅从WEB开发而言,对于中小企业Spring太老了,laravel基本上可以很给力的应付相同需求
2018年5月15日更新:
=====================================================
最近几个月开始用Spring boot写一些公司的Restful API, 用起来比Spring方便了不是一点半点, 写起代码起来舒服了许多。经过这几个月的Spring boot的编写跟Laravel再做一个比较,因为写的业务基本上都差不多,虽然我接触Spring只有几个月不过,这些MVC的主体逻辑大致相同,上手起来也挺快的,写一些我个人的理解:
1.开发时间上,即使是Spring boot,开发效率还是远不如Laravel, 无论是从API还是模板引擎。Spring往往会需要写大量的Service和嵌套的DAO。如果涉及到更复杂的数据库Query或者动态的query customization, 无论是hibernate还是JPA Repository都会给你噩梦般的体验。如果涉及到相对复杂一点的个性化的 Vlidation Rule更是极为繁琐,尤其是当前的Spring validation Bean Context还不是注册在Spring Bean Context里,如果想注入自己的Service配置起来都想砸电脑。相比较,Laravel的model很清晰的给了你所需要的一切。 总而言之,就是如果想写一些根据自己情况个人定制的东西,Spring(包括spring boot)会极其麻烦,而另一方面laravel out of box的特性,使你如果要写一些深度的个性化定制会很难,不过现在大部分的企业谁会有那么多的特殊情况去写呢?
2.单元测试: spring boot使用Junit,单元测试还要小心翼翼地配置Spring appilication context, 要是测试涉及到JPA尤其是双数据库(MongoDB + SQL)配置起来如同天灾。如果用mokito配置假的测试参数也得写好多行代码很麻烦。 laravel单元测试,artisan一行命令帮你搞定。
3.官方文档和用户群,Spring的文档真的是我见过所有框架里写最糟糕的,像是一本字典一样,看完不知所云,80%的情况无法有效地提供你所需要的解决方法。当你转头去StackOverflow寻求帮助的时候,里面的回答千变万化,根本无法找到所谓的标准回答,怎么写的都有,完全凭借你的阅读代码能力和个人经验去判断。而且这么多年spring的更新换代,不同版本的不同写法的回答层次不齐,很难有效地解决你的问题。 而Laravel官方文档,界面读起来十分友好,内容也很好的一步步解释各种功能的实现, 赞!
总结:
话说到这,我自己也要问自己,虽然Spring甚至Spring boot这么麻烦, 可招聘网站的职位那么多,反观Laravel岗位却零零星星没几个。我个人觉得因为大多数企业,比如银行还有大型的金融企业,它们的内部系统要么是很早以前用的J2EE,要么就是直接从SAP那里买来一套CRM系统。这么多年一直添砖加瓦已经十分庞大了很难找到其他东西替换。甚至Spring Boot在这里都用不到,你来了以后还是继续维护它们这个版本的Spring项目,往里面搬砖, dependency injection也还是用当年的Xml配置。
Laravel因为推出的比较晚,设计上很科学,从5.1到现在5.6结构上很稳定也没有做出太大变动,为什么用的公司不是很多呢?细细比较一看,发现Python的Django跟laravel一比好像也没多大差别, 老一些的PHP项目也都是在用Yii。 新公司逻辑层都转战到Angular上了,后台API不是用Django就是用nodejs,只是简单的做一些用户验证还有数据库读取, laravel能做的其他的框架也都能,况且现在非CS专业都要学python了,你也没见大学教PHP不是嘛。
最后:如果目标是老牌大企业的话,spring还是得学的。 反正这些都是工具帮助我们解决问题,根据公司的情况去选择。如果作为职业规划,学这俩真不如学Angular4+,人家谷歌的文档看着也舒服,想学laravel也用不了几天
2018 - 10 - 15 更新
=============================
总结:
还是Java大法好
楼主最近跳槽了, 面试官面试的时候就是主要看到我之前有Spring的经验尤其是Spring Security和API方面的才选择到了我。所以从自身体会上切切实实的体会到了,Java方向还是比PHP工作机会要多出不少。而且更觉得,其实,laravel好是虽好,不过laravel能干的,python的Django一样能干;python能干的,PHP却不一定。我之前学过django,学习难度上二者相差无几。
从Web方向其实更看好Angular, 招聘网站上后台技术千千万,前台都在用angular
2019-11-01 更新
最近单位有项目要上微服务(Microservice),平台就是类似于AWS或者Azure的云平台。主要用到的是Kubernestes来管理流量以及每一个Docker节点的各种自动化。 外加利用CI设置一键自动化部署,任何代码的更新只要反映到git master branch,travisCI会做Unit test 然后构建docker image, 然后 kubernetes会自动更新部署到服务器然后重启。
这个项目我还是写API, 用的是nodeJs,感觉node用来写规模很小的项目特别好用。 好多东西都是core library自带的, 比方说http,file os 等等。但是语法有时候有点奇怪,debug稍稍有限诡异。后续感想有时间继续更新
2020-04-22更新
现在越来越喜欢用Nodejs了,PHP对不起,我失去了对你的忠诚。之前觉得nodejs写法诡异完全是因为对Promise,callBack的理解不够到位。随着越来越多的学习和开发经验,现在越来越喜欢上了nodejs。然后写nodejs也不要太拘泥于设计模式,自己怎么舒服就怎么写,nodejs是单线程的,而且IO之类的效率非常棒,用来写BatchJob也非常棒
我觉得nodejs就是为微服务和云开发而生的,搭配上docker堪称完美。现在稍微小一点的项目我就会上nodejs,效率杠杠的。大项目就上spring boot。最近主要在忙着学习AWS的云平台准备月底考个他家的证,祝我好运。
之前前台Angular大法好,换一下。。。。现在前台React大法更好,赶紧学....