像Laravel框架這么強(qiáng)大了,為什么我們還需要Spring MVC這類J2EE框架來開發(fā)網(wǎng)站?
時間:2023-11-25 09:06:01 | 來源:網(wǎng)站運(yùn)營
時間:2023-11-25 09:06:01 來源:網(wǎng)站運(yùn)營
像Laravel框架這么強(qiáng)大了,為什么我們還需要Spring MVC這類J2EE框架來開發(fā)網(wǎng)站?:那么多評論里大部分人壓根都沒有用過laravel,完全是出于對PHP的偏見進(jìn)行評論。PHP只能寫CMS博客?大哥你確定你真的寫過PHP?
我覺得這個問題我最有資格回答, 我是PHP出身,從上大學(xué)到讀研項目就一直從事PHP WEB方向。也學(xué)過Python和Django,做網(wǎng)站進(jìn)行一些CRUD操作,開發(fā)也很快且優(yōu)雅。但是做企業(yè)級應(yīng)用跟laravel比還是稍遜風(fēng)騷。
我在保險公司也項目,業(yè)務(wù)邏輯算是很長的了吧,用的是Laravel,。第一次接觸真的覺得這東西很NB,標(biāo)準(zhǔn)的MVC和面向?qū)ο蠹軜?gòu),最新的API設(shè)計理念。安全認(rèn)證,模板,Session,ORM, 路由甚至第三方的消息發(fā)送,在線支付,郵件系統(tǒng)... 所有的模塊框架都幫你拼接配置好或者也就是artisan一個命令行的事情解決,從來都不需要費(fèi)心考慮底層的東西,專心寫代碼。這樣開發(fā)真的很美麗。
后來業(yè)務(wù)量上去,再加上用戶需求也上來,需要不停修改,更新代碼,有時候還需要考慮算法的問題。整個項目變得越來越笨重,而且一些地方很難根據(jù)自身情況私人訂制。
然后開始決定轉(zhuǎn)JAVA,因為公司需要用到一些PDF文件的操作,PHP沒有像Java的Pdfbox和Itext那種龐大的庫,而且據(jù)說J2EE或者Spring開發(fā)的企業(yè)級項目十分穩(wěn)定(反正招聘網(wǎng)站上大公司大多招JAVA崗位,工資一般也比同級別PHP的要高,不過技術(shù)要求看起來都很老)。剛開始的時候,頭都要炸裂了,各個模塊都需要自己配置,而且不得不說laravel的文檔真的非常好,比spring清晰地太多。而且開發(fā)的過程,越來越覺得就框架設(shè)計而言laravel要先進(jìn)很多。但是隨著學(xué)習(xí)的深入Spring,IOC, AOP, 依賴注入,對我編程思想的啟迪很大。不過對于項目的開發(fā)并沒有卵用,就以API為例,我只是想簡單的返回一個json對象,你spring還要在那造個Bean,又要用各種helper class跟annotation,人家laravel直接return變量,不管你是對象也好,數(shù)組也好,自動幫你轉(zhuǎn)換成json有木有。而且等我配置好各種spring的xml文件,我的PHP項目都已經(jīng)做好了,可以下班回家吃飯了。laravel開發(fā)真的很快很舒服,從來沒見過像laravel里dd()這么牛逼的debug函數(shù),更不用說本身apache比tomcat要方便的太多。
也許上升到淘寶那種級別的應(yīng)用,實現(xiàn)業(yè)務(wù)邏輯與底層的分離,spring這種框架才能發(fā)揮它的優(yōu)勢。但是僅從WEB開發(fā)而言,對于中小企業(yè)Spring太老了,laravel基本上可以很給力的應(yīng)付相同需求
2018年5月15日更新:
=====================================================
最近幾個月開始用Spring boot寫一些公司的Restful API, 用起來比Spring方便了不是一點半點, 寫起代碼起來舒服了許多。經(jīng)過這幾個月的Spring boot的編寫跟Laravel再做一個比較,因為寫的業(yè)務(wù)基本上都差不多,雖然我接觸Spring只有幾個月不過,這些MVC的主體邏輯大致相同,上手起來也挺快的,寫一些我個人的理解:
1.開發(fā)時間上,即使是Spring boot,開發(fā)效率還是遠(yuǎn)不如Laravel, 無論是從API還是模板引擎。Spring往往會需要寫大量的Service和嵌套的DAO。如果涉及到更復(fù)雜的數(shù)據(jù)庫Query或者動態(tài)的query customization, 無論是hibernate還是JPA Repository都會給你噩夢般的體驗。如果涉及到相對復(fù)雜一點的個性化的 Vlidation Rule更是極為繁瑣,尤其是當(dāng)前的Spring validation Bean Context還不是注冊在Spring Bean Context里,如果想注入自己的Service配置起來都想砸電腦。相比較,Laravel的model很清晰的給了你所需要的一切。 總而言之,就是如果想寫一些根據(jù)自己情況個人定制的東西,Spring(包括spring boot)會極其麻煩,而另一方面laravel out of box的特性,使你如果要寫一些深度的個性化定制會很難,不過現(xiàn)在大部分的企業(yè)誰會有那么多的特殊情況去寫呢?
2.單元測試: spring boot使用Junit,單元測試還要小心翼翼地配置Spring appilication context, 要是測試涉及到JPA尤其是雙數(shù)據(jù)庫(MongoDB + SQL)配置起來如同天災(zāi)。如果用mokito配置假的測試參數(shù)也得寫好多行代碼很麻煩。 laravel單元測試,artisan一行命令幫你搞定。
3.官方文檔和用戶群,Spring的文檔真的是我見過所有框架里寫最糟糕的,像是一本字典一樣,看完不知所云,80%的情況無法有效地提供你所需要的解決方法。當(dāng)你轉(zhuǎn)頭去StackOverflow尋求幫助的時候,里面的回答千變?nèi)f化,根本無法找到所謂的標(biāo)準(zhǔn)回答,怎么寫的都有,完全憑借你的閱讀代碼能力和個人經(jīng)驗去判斷。而且這么多年spring的更新?lián)Q代,不同版本的不同寫法的回答層次不齊,很難有效地解決你的問題。 而Laravel官方文檔,界面讀起來十分友好,內(nèi)容也很好的一步步解釋各種功能的實現(xiàn), 贊!
總結(jié):
話說到這,我自己也要問自己,雖然Spring甚至Spring boot這么麻煩, 可招聘網(wǎng)站的職位那么多,反觀Laravel崗位卻零零星星沒幾個。我個人覺得因為大多數(shù)企業(yè),比如銀行還有大型的金融企業(yè),它們的內(nèi)部系統(tǒng)要么是很早以前用的J2EE,要么就是直接從SAP那里買來一套CRM系統(tǒng)。這么多年一直添磚加瓦已經(jīng)十分龐大了很難找到其他東西替換。甚至Spring Boot在這里都用不到,你來了以后還是繼續(xù)維護(hù)它們這個版本的Spring項目,往里面搬磚, dependency injection也還是用當(dāng)年的Xml配置。
Laravel因為推出的比較晚,設(shè)計上很科學(xué),從5.1到現(xiàn)在5.6結(jié)構(gòu)上很穩(wěn)定也沒有做出太大變動,為什么用的公司不是很多呢?細(xì)細(xì)比較一看,發(fā)現(xiàn)Python的Django跟laravel一比好像也沒多大差別, 老一些的PHP項目也都是在用Yii。 新公司邏輯層都轉(zhuǎn)戰(zhàn)到Angular上了,后臺API不是用Django就是用nodejs,只是簡單的做一些用戶驗證還有數(shù)據(jù)庫讀取, laravel能做的其他的框架也都能,況且現(xiàn)在非CS專業(yè)都要學(xué)python了,你也沒見大學(xué)教PHP不是嘛。
最后:如果目標(biāo)是老牌大企業(yè)的話,spring還是得學(xué)的。 反正這些都是工具幫助我們解決問題,根據(jù)公司的情況去選擇。如果作為職業(yè)規(guī)劃,學(xué)這倆真不如學(xué)Angular4+,人家谷歌的文檔看著也舒服,想學(xué)laravel也用不了幾天
2018 - 10 - 15 更新
=============================
總結(jié):
還是Java大法好
樓主最近跳槽了, 面試官面試的時候就是主要看到我之前有Spring的經(jīng)驗尤其是Spring Security和API方面的才選擇到了我。所以從自身體會上切切實實的體會到了,Java方向還是比PHP工作機(jī)會要多出不少。而且更覺得,其實,laravel好是雖好,不過laravel能干的,python的Django一樣能干;python能干的,PHP卻不一定。我之前學(xué)過django,學(xué)習(xí)難度上二者相差無幾。
從Web方向其實更看好Angular, 招聘網(wǎng)站上后臺技術(shù)千千萬,前臺都在用angular
2019-11-01 更新
最近單位有項目要上微服務(wù)(Microservice),平臺就是類似于AWS或者Azure的云平臺。主要用到的是Kubernestes來管理流量以及每一個Docker節(jié)點的各種自動化。 外加利用CI設(shè)置一鍵自動化部署,任何代碼的更新只要反映到git master branch,travisCI會做Unit test 然后構(gòu)建docker image, 然后 kubernetes會自動更新部署到服務(wù)器然后重啟。
這個項目我還是寫API, 用的是nodeJs,感覺node用來寫規(guī)模很小的項目特別好用。 好多東西都是core library自帶的, 比方說http,file os 等等。但是語法有時候有點奇怪,debug稍稍有限詭異。后續(xù)感想有時間繼續(xù)更新
2020-04-22更新
現(xiàn)在越來越喜歡用Nodejs了,PHP對不起,我失去了對你的忠誠。之前覺得nodejs寫法詭異完全是因為對Promise,callBack的理解不夠到位。隨著越來越多的學(xué)習(xí)和開發(fā)經(jīng)驗,現(xiàn)在越來越喜歡上了nodejs。然后寫nodejs也不要太拘泥于設(shè)計模式,自己怎么舒服就怎么寫,nodejs是單線程的,而且IO之類的效率非常棒,用來寫B(tài)atchJob也非常棒
我覺得nodejs就是為微服務(wù)和云開發(fā)而生的,搭配上docker堪稱完美?,F(xiàn)在稍微小一點的項目我就會上nodejs,效率杠杠的。大項目就上spring boot。最近主要在忙著學(xué)習(xí)AWS的云平臺準(zhǔn)備月底考個他家的證,祝我好運(yùn)。
之前前臺Angular大法好,換一下。。。?,F(xiàn)在前臺React大法更好,趕緊學(xué)....
關(guān)鍵詞:發(fā)網(wǎng),強(qiáng)大