企業(yè)信息化-技術(shù)架構(gòu)

作為一個(gè)java程序員,一直開(kāi)發(fā)基于web的企業(yè)應(yīng)用軟件。技術(shù)棧是很普通的spring相關(guān)項(xiàng)目。原來(lái)使用的spring mvc + spring+ spring data JPA,數(shù)據(jù)庫(kù)則采用開(kāi)源的mysql數(shù)據(jù)庫(kù)。

實(shí)踐中架構(gòu)的問(wèn)題

1.spring mvc作為web端本質(zhì)上還是java來(lái)處理前端,java作為前端處理的語(yǔ)言,個(gè)人覺(jué)得并不太適合。java的用類(lèi)生成的對(duì)象模型來(lái)處理所有問(wèn)題。但是觀(guān)察前端的處理方式,php,ruby,Python,nodejs等動(dòng)態(tài)語(yǔ)言比較流行,而且開(kāi)發(fā)效率上更高。很多網(wǎng)站的項(xiàng)目原型都是基于這些語(yǔ)言構(gòu)建的。即使運(yùn)行效率不高,也可以在后期更換或者重新設(shè)計(jì)。
2.orm持久層,java的orm持久層的問(wèn)題一直存在。JPA的只是一個(gè)標(biāo)準(zhǔn),實(shí)現(xiàn)則基于hibernate。這種持久層映射的方式門(mén)檻很高,數(shù)據(jù)庫(kù)本身的特性,也不能很好利用。如果優(yōu)化之類(lèi)的,也更麻煩。此類(lèi)orm最大問(wèn)題是為了解決對(duì)象和關(guān)系數(shù)據(jù)庫(kù)的失配問(wèn)題,而引入了更多的復(fù)雜性。
3.單體架構(gòu)擴(kuò)展能力有限

了解決上述的問(wèn)題,思考可能的解決方案

前端問(wèn)題:

作為后端程序員,前端是個(gè)很難解決的問(wèn)題。css+html+js的方式跟單純的編程處理問(wèn)題還是有本質(zhì)上的不同,要考慮展現(xiàn)并不是后端處理的強(qiáng)項(xiàng)。但bs的優(yōu)勢(shì)顯而易見(jiàn),即開(kāi)即用的是最大優(yōu)勢(shì)。而且可以隨時(shí)升級(jí),無(wú)需停止服務(wù)。但是劣勢(shì)也很明顯,瀏覽器作為沙盒,面對(duì)很多限制。跟本地軟件比起來(lái),運(yùn)行效率,本地調(diào)用,系統(tǒng)api控制等,都是它的體驗(yàn)落后于桌面客戶(hù)端。
退一步考慮這個(gè)問(wèn)題,現(xiàn)在html5標(biāo)準(zhǔn)有很多新特性,都是用來(lái)解決上述問(wèn)題的,而且很多特性完全可以媲美本地客戶(hù)端。只能說(shuō)將來(lái)會(huì)更美好。
前端在提供自己的處理能力同時(shí),也不在是簡(jiǎn)單的處理樣式和簡(jiǎn)單腳本。前端也越來(lái)越向后端靠攏,nodejs的出現(xiàn),使得前端的工程化更加明顯。代碼管理,編譯,打包,發(fā)布,這些后端的開(kāi)發(fā)工具漸漸也在前端形成了技術(shù)棧。
而個(gè)人認(rèn)為大前端是個(gè)很好的方向,淘寶之類(lèi)的大型網(wǎng)站都在做這些工作。它們有最優(yōu)秀的前端工程師,而且這些大前端人員的業(yè)務(wù)范圍不再是傳統(tǒng)的前端,而是涉及到了后端的很大一部分操作。這是正確的方向,因?yàn)樵跇I(yè)務(wù)上,傳統(tǒng)的前端其實(shí)把很大的一部分責(zé)任推到了后端。因?yàn)榧夹g(shù)的發(fā)展,它們只是承擔(dān)起了自己的責(zé)任。這使得他們可以更專(zhuān)業(yè)的處理自己的工作。架構(gòu)也更合理。

持久層問(wèn)題:

個(gè)人沒(méi)怎么用過(guò)hibernate,只是用過(guò)一段時(shí)間JPA。為了符合jpa的規(guī)范,把本來(lái)很好的數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)變得面目全非是常有的事。我是不明白為什么業(yè)界還在這方面努力,他們創(chuàng)造的問(wèn)題比解決的更多。所以,mybatis的設(shè)計(jì)更合理,數(shù)據(jù)庫(kù)結(jié)構(gòu)的設(shè)計(jì)由業(yè)務(wù)來(lái)決定,orm只是幫助來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)和代碼的協(xié)作。非要把關(guān)系數(shù)據(jù)庫(kù)映射成對(duì)象,簡(jiǎn)直是自尋煩擾。但是mybatis有個(gè)問(wèn)題是他是基于xml的方式,xml畢竟不是java代碼,java IDE的好處它一樣也無(wú)法使用。
那么合理的數(shù)據(jù)庫(kù)處理應(yīng)該怎么樣呢?
個(gè)人認(rèn)為合理的方式應(yīng)該是針對(duì)數(shù)據(jù)庫(kù)本身的一種抽象。比如把一個(gè)表抽象成一個(gè)類(lèi),一行抽象成類(lèi)對(duì)象,列抽象成字段,字段之間的關(guān)系是基于數(shù)據(jù)庫(kù)關(guān)系來(lái)設(shè)計(jì)的。也就是說(shuō)設(shè)計(jì)成數(shù)據(jù)庫(kù)dsl的方式。用dsl來(lái)最大化控制數(shù)據(jù)庫(kù),而數(shù)據(jù)庫(kù)和對(duì)象的轉(zhuǎn)換,則是由程序員來(lái)控制。
最接近這種設(shè)計(jì)方式的是jooq,它的企業(yè)版收費(fèi),目前使用過(guò)程中很方便。會(huì)sql就能很好的使用這個(gè)庫(kù)。
單體架構(gòu)問(wèn)題:
業(yè)界流行服務(wù)架構(gòu),這不僅是流行趨勢(shì),也確實(shí)是解決了單體架構(gòu)的很多問(wèn)題。spring 也推出了boot框架,來(lái)開(kāi)發(fā)微服務(wù)的項(xiàng)目。只是整個(gè)項(xiàng)目有點(diǎn)龐大,涵蓋方方面面?;窘鉀Q了大部分問(wèn)題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,261評(píng)論 6 342
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,535評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,917評(píng)論 25 709
  • 這城市有時(shí)候很小 小到一個(gè)轉(zhuǎn)身就能夠看見(jiàn)笑著的你 這城市有時(shí)候也很大 大到這眼前望不到盡頭的城市卻沒(méi)有一個(gè)地方是自...
    MsAmor閱讀 274評(píng)論 0 0
  • 有打算寫(xiě)個(gè)小項(xiàng)目來(lái)練練手,把iOS開(kāi)發(fā)中的幾個(gè)大塊的知識(shí)點(diǎn)融入進(jìn)去,比如CoreData,和iCloud存儲(chǔ),幾個(gè)...
    _賴(lài)筆小新閱讀 381評(píng)論 1 4

友情鏈接更多精彩內(nèi)容