一个懒人专用文章归档神器,如果你不能成为压路机的一部分,那么你就只能成为道路的一部分 Bala~bala~

像Laravel框架这么强大了,为什么我们还需要Spring MVC这类J2EE框架来开发网站?

java 懒人 1295℃ 0评论

https://www.zhihu.com/question/31378186
首先,SpringleMVC只是Spring Framework里面的一个小模块,只是Spring用来解决HTTP展示的一个方法。而真正的Spring Projects里面,却涵盖了企业从小到大所需要的各式各样的中间件。Boot, Cloud, Integration, Xd等等,您可以自己去看看上面的简介。
Laravel我不是很清楚,看简介是一个全栈,PHP界的ROR,那对比起来,Java里面应该是Play或者Grails。
如果问题上升到,我到底是用PHP来写网站还是用Java来写网站,我只想说你随意。如果你非要加一个理由,我想说你熟悉哪个用哪个。因为我现在觉得,搭建一个网站容易,维护起来比较麻烦。那我自己的经验来举例的话,我更熟悉Java,我熟悉Java语言写的,应用监控,日志处理,搜索集成,消息处理,RPC调用,项目发布,UnitTests,ORM工具,还有Hadoop,Sprak等大数据处理,你要我去用PHP去搞这些,不是PHP有没有的问题,而是我根本不知道哪儿找这些依赖。
综上,你会啥就用啥,用啥不要紧,只要用到好

作者:beneo
链接:https://www.zhihu.com/question/31378186/answer/51698392
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

作者:厂汉板胡胡
链接:https://www.zhihu.com/question/31378186/answer/253553801
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

那么多评论里大部分人压根都没有用过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大法更好,赶紧学….
编辑于 04-23
继续浏览内容

知乎
发现更大的世界
打开

Chrome
继续

安正超
码农、手艺人,订阅号:假装我会写代码
其实这种问题根本不用问了。
1. 你们老大让用java还是php你就用啥;
2. 你熟悉哪个就用哪个(如果你能自己决定的情况下);
3. 如果你是团队老大,那么你就不该问这个问题,因为选择任何一种技术方案的考量都不只是一方面;
4. 使用场景不同,看你目前的情况,团队,运维,公司在这门语言上的技术积累,这些更偏向于哪个用哪个;
5. 赞楼上的这句:“工具根本起不了决定性作用。关键还在于工具的使用者。”
发布于 2015-06-17
继续浏览内容

知乎
发现更大的世界
打开

Chrome
继续

AWS
广告​
知乎广告介绍
使用AWS构建可靠且可扩展的网站和Web应用程序
在传统数据中心开发和部署可伸缩、全球可用的Web应用需要执行大量的手动操作,这会耗费大量人力物力,负载高峰和流量波动会导致资源配置不足或过度配置。如今在AWS上构建网站免费,在云中构建、部署和管理网站和Web应用程序所需的免费产品和服务易如反掌。查看详情

eechen
不妥协,不逐流,随性而不失个性。
按楼主的逻辑,难道不应该这样问么?
既然Java Spring和Ruby on Rails这么强大?干嘛还需要Laravel呢?
大型复杂臃肿的PHP框架跟PHP运行模式背道而驰,数量级地拉低PHP应用的性能,一点都不环保,一点都不绿色,跟”节能减排”格格不入.PHP解释器性能本来是不错的,不过因为把大型框架堆积在FastCGI模式下运行,严重拖慢了PHP的性能.就性能这点,Java Spring就能甩Laravel几条街,还想取代Spring,真是异想天开.
没有好身世的PHP能在Web上称雄,不是靠那些框架,而是靠各种PHP应用(CMS/BBS/Shop),2004年PHP当选TOIBE年度编程语言的时候,PHP框架盛行了么?连Ruby on Rails都只是刚发布.
回复
@樊凡
:
好的架构本来就应该是简单高效的.
好的PHP程序应该尽量发挥PHP的优势而不是放大PHP的缺陷.最典型的就是PHP本来就具备模板引擎的功能,为什么某些PHP框架还非得引入一门第三方模板引擎呢?
Apache和PHP-FPM下每个PHP脚本本质都可以认为是一个可以单独运行的CGI程序,请求结束释放资源.显然”页面控制器”比”前端控制器”更加适合PHP,因为每个请求都进入前端控制器进行正则路由分析,存在不小开销.而页面控制器只需用一个ROOT常量定义入口,加载common.php执行公共操作(如加载库函数functions.php和验证cookie),用switch/case等值判断进行路由,如:
有一个页面控制器settings,用于设置很多模块,有很多表单要处理: /admin/settings.php?section=setup /admin/settings.php?section=features 可以分解为: /admin/settings/header.php /admin/settings/setup.php /admin/settings/features.php /admin/settings/footer.php 这样,就算再多section也不怕,统统分到settings下面,看文件目录就能识别从属关系. settings的子控制器如setup.php里有多个表单的话可以用switch($_POST[‘action’])处理.

转载请注明:懒人档案室 » 像Laravel框架这么强大了,为什么我们还需要Spring MVC这类J2EE框架来开发网站?

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址