Spring+mybatis+gradle 項(xiàng)目搭建實(shí)戰(zhàn)-前篇

本人博客:http://chen-shang.github.io

在公司有幸自己搭建了一套項(xiàng)目,牛刀小試。挺感謝組長(zhǎng),在搭建的過(guò)程中他跟我分享了許多他以前的經(jīng)驗(yàn)和教訓(xùn)。

** 搭建一個(gè)好項(xiàng)目的終極奧義是為了別人寫(xiě)代碼的時(shí)候爽?。?**

你搭建的項(xiàng)目最終還是由其他人來(lái)開(kāi)發(fā)業(yè)相關(guān)務(wù)代碼的,所以要讓別人在你框架上寫(xiě)的開(kāi)心才行。
搭建項(xiàng)目這種事,在牛人眼里是最最基礎(chǔ)和最最簡(jiǎn)單的事情了。對(duì)于我這樣的初學(xué)者,搭建項(xiàng)目需要考慮的問(wèn)題還是蠻多的,我第一次搭建項(xiàng)目也不是很熟悉,現(xiàn)在這次實(shí)戰(zhàn)的經(jīng)驗(yàn)做出以下總結(jié)。

如今 saas 項(xiàng)目已初具規(guī)模了,大家在這套框架上寫(xiě)代還是比較愉快的。
這篇文章只是搭建項(xiàng)目中需要考慮的情況和遇到的問(wèn)題的總結(jié),重在思想的概括,不涉及具體技術(shù)的使用。

主旨

  1. 項(xiàng)目的定位
  2. 使用技術(shù)的選擇
  3. 搭建過(guò)程中考慮到的問(wèn)題

項(xiàng)目定位

首先是項(xiàng)目的定位,也就是這個(gè)項(xiàng)目是為什么服務(wù)的?
你是給前端喂接口呢,還是與供應(yīng)商對(duì)接呢?你是內(nèi)網(wǎng)訪問(wèn)呢還是要把服務(wù)對(duì)外公開(kāi)呢?
你首先要有一個(gè)清醒的認(rèn)識(shí)那就是你做的是個(gè)什么東西。

我需要做的 saas 項(xiàng)目就屬于一個(gè)給前端為接口的一個(gè)項(xiàng)目, vendor[我公司的其他項(xiàng)目組的項(xiàng)目,其主要職責(zé)則是與供應(yīng)商對(duì)接然后對(duì)內(nèi)提供基礎(chǔ)服務(wù)的]則是屬于與供應(yīng)商對(duì)接的項(xiàng)目, HL(Hyperloop)[我公司的另一個(gè)項(xiàng)目組的項(xiàng)目,我也在里面呆過(guò),也是里面的元老級(jí)人物了] 則隱藏在內(nèi)網(wǎng)中不準(zhǔn)備對(duì)外暴露接口的項(xiàng)目

清楚了我是要做一個(gè)喂接口項(xiàng)目,不是 web 項(xiàng)目,所以沒(méi)有必要非得給應(yīng)用加上 web 頁(yè)面的功能,但要考慮到以后有可能會(huì)做擴(kuò)展,未雨綢繆總是好的,開(kāi)發(fā)過(guò)程中唯一不變的就是變化!

使用技術(shù)選擇

做開(kāi)發(fā),用什么技術(shù)都能實(shí)現(xiàn), 選擇 scala 或者是 java 都行,選擇 play框架或是 spring 框架也都行,關(guān)鍵在于你所處的大環(huán)境。往往有些時(shí)候,你學(xué)的和你用的技術(shù)往往都不大相關(guān),就像我學(xué)匯編出身(因?yàn)槲覀儗?zhuān)業(yè)就教這個(gè)),我工作后用 java(因?yàn)楣镜那拜吶际莏ava兒),我來(lái)北京分貝通后用 scala(因?yàn)橹暗膯T工非常之討厭 java 和非常之喜歡 scala 這門(mén)語(yǔ)言)。

我們最后討論選擇了
spring + spring mvc + mybatis + postgres

軟件開(kāi)發(fā)語(yǔ)言最終還是放棄使用 scala了(scala 的 slick 框架對(duì)事物的支持并不太友好,這個(gè)其他同事很是反感) 轉(zhuǎn)而是用 java(畢竟好招人啊)
最終還是沒(méi)有沿用 play 框架, 轉(zhuǎn)而使用了 spring 那一套(還是大家之前都是 java兒,想都沒(méi)想都想用 spring 了)

既然使用了 spring 那持久層自然選用呼聲較高的 mybatis了

項(xiàng)目管理工具使用 gradle(因?yàn)槲疑弦患夜揪陀眠@個(gè),我還是比較熟悉,而且比較新,在我的強(qiáng)力要求下使用--其實(shí)是努力爭(zhēng)取下)

數(shù)據(jù)庫(kù)沿用公司其他項(xiàng)目使用的數(shù)據(jù)庫(kù) postgres 考慮到與其他項(xiàng)目兼容問(wèn)題吧

搭建過(guò)程中思考的問(wèn)題

鑒于其他項(xiàng)目組暴露出來(lái)的問(wèn)題,爭(zhēng)取在 saas 項(xiàng)目中避免
抽象的重要性就提現(xiàn)出來(lái)了
提供統(tǒng)一的接口來(lái)處理一些共性的問(wèn)題,這樣大家寫(xiě)的代碼也比較整齊,不會(huì)對(duì)同一功能,你寫(xiě)一套,他寫(xiě)一套

1、既然是提供接口,那就得記得打印輸出日志吧,日志系統(tǒng)需要健壯并完善
2、日志的requestid
3、http交互
4、測(cè)試框架
5、發(fā)版系統(tǒng)
6、全局參數(shù),全局屬性,配置文件讀取
7、與其他系統(tǒng)交互是的鑒權(quán)
8、命名和編程風(fēng)格
9、統(tǒng)一的異常處理體系

首先是日志這一塊兒,一個(gè)良好的日志可以快速定位問(wèn)題所在。選用 logback 來(lái)輔助, MDC 來(lái)生成全局唯一的 requestid,考慮到并打的時(shí)候,日志的打印是無(wú)序的,需要一個(gè)全局的 requstid 來(lái)將請(qǐng)求串聯(lián)起來(lái)。

再就是這個(gè)系統(tǒng)肯定會(huì)于其他系統(tǒng)或后臺(tái)交互,所以需要提供一套與網(wǎng)絡(luò)交互的 api 方便其他同事使用

開(kāi)發(fā)過(guò)程中,隨手寫(xiě)測(cè)試是很重要的,mock 的技巧會(huì)使你輕松很多。

寫(xiě)代碼中免不了會(huì)用到配置文件,提供一個(gè)公共的類(lèi)來(lái)使用。

最后寫(xiě)好開(kāi)發(fā)文檔,像這些功能最好有一個(gè)詳細(xì)的文檔,當(dāng)新同事來(lái)的時(shí)候可以快速入手,避免重復(fù)制造輪子,因?yàn)樾峦聛?lái)的時(shí)候項(xiàng)目已經(jīng)很龐大了,沒(méi)有人會(huì)一個(gè)一個(gè)類(lèi)的去看你是做什么的,當(dāng)他也需要讀配置文件或者使用網(wǎng)絡(luò)請(qǐng)求的時(shí)候很有可能就會(huì)按照自己的習(xí)慣和風(fēng)格開(kāi)始另起爐灶,導(dǎo)致系統(tǒng)越來(lái)越龐大。

總結(jié)

最后在在說(shuō)一遍, 變化是唯一不變的事情??!盡量考慮到變化和擴(kuò)展,我也只能盡力了??!加油

最后編輯于
?著作權(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)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評(píng)論 6 342
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評(píng)論 25 709
  • 人說(shuō)廢畫(huà)三千,方成大觸。我又離這近了點(diǎn)。
    向上有陽(yáng)光閱讀 464評(píng)論 0 0
  • 姚小賽170718分享:9/100,自從7月2日參與時(shí)間管理沙龍,早起的習(xí)慣已經(jīng)實(shí)現(xiàn)了,基本到了5點(diǎn)左右自然醒。起...
    小年2016閱讀 268評(píng)論 0 1

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