2016年底,我們經(jīng)理由于自身優(yōu)秀的品質(zhì),在一次和客戶項目合作中,被客戶所欣賞,客戶愿意為他在深圳開一間分公司.客戶那邊主要是硬件研發(fā)以及工廠生產(chǎn),所以他們想在深圳開一間軟件公司,最終達(dá)到軟硬件結(jié)合來為他們的客戶提供完整的解決方案.
恰好經(jīng)理所在的公司A(地址在東莞)由于老板想轉(zhuǎn)行不想做軟件行業(yè)而宣布解散. A公司也是我和我老婆(那時是女友現(xiàn)在結(jié)婚了)畢業(yè)后的第一個公司. 去A公司實習(xí)也是由于經(jīng)理來我們學(xué)校招實習(xí)生, 他們不需要筆試面試 就可以直接錄用,實習(xí)三個月后再考核決定是否轉(zhuǎn)正. 為了我和我老婆能在一個公司, 我們就一起去了A公司.
從14年10月實習(xí)(15年畢業(yè))到16年4月一直在A公司, 我負(fù)責(zé)后臺接口的開發(fā),而我老婆則負(fù)責(zé)原型設(shè)計,因為某些原因我和我老婆跳槽來到了深圳.我們還是在一個公司B(順便說一句我和我老婆是高中同一個班,高中追的她,高考分?jǐn)?shù)比她高一分,大學(xué)同一個班,畢業(yè)之后也一直在同一個公司.) ,但是不在同一個部門.
時間到了16年底, 也就是經(jīng)理已經(jīng)答應(yīng)客戶愿意負(fù)責(zé)深圳這邊開的公司,經(jīng)理就找到了我們夫妻兩,希望我們能加入他們,因為那是他們什么都沒有什么也都沒準(zhǔn)備內(nèi)心里還是覺得有點不靠譜. 不過說來也奇怪,在經(jīng)理找我們的前幾天,我突然意識到在一個大公司里一個小程序員是很難發(fā)展起來的,因為在B公司我主要是維護(hù)一個有十幾年歷史的大系統(tǒng),有什么需求就修修改改,如果一直這樣下去待遇和能力并不會有質(zhì)的提升而且老系統(tǒng)的話就不會有很多新技術(shù)的研究.
我還清晰的記得我和B公司的同事說:"像我們這樣是混不起來的,只有在一個小公司當(dāng)一個核心人員,然后和公司一起發(fā)展,公司發(fā)展起來,我們才能發(fā)展的起來." 這個同事現(xiàn)在也被我叫到這個新開的公司C了.所以經(jīng)理一說這個我心里就有共鳴了,加上待遇比現(xiàn)在的也高些,我們就一起辭職來到新公司.
由于老板直接在深圳買了一間毛坯的辦公室,因為裝修需要時間,我們暫時也辦不了工,所以我們那時享受了三個月的帶薪休假,爽的不行. 不得不說老板的眼光真好,這間辦公室升值了不少而且辦公室不遠(yuǎn)就是商業(yè)公寓, 3分半就可以從家到公司, 最爽的是吃完午飯還可以回家趟在床上睡午覺, 想想就開心. 以前都是趴在桌子上每次睡完覺手腳都是麻的.
17年3月1日正式辦公,公司就只有5個人,我主要負(fù)責(zé)項目的架構(gòu)以及技術(shù),我老婆負(fù)責(zé)項目的原型設(shè)計,還有兩個也是在A公司解散時經(jīng)理帶的兩個同事.也是和我一起在14年同一批入職A公司. 大家都非常熟悉關(guān)系也蠻好 不過這兩位因為不同的原因現(xiàn)在已經(jīng)離職了. 不過有一位同事我要說一下, 他離職的原因是因為他老婆生了孩子,在東莞請的月嫂工資比他高多了, 所以家里人叫他回去繼承家產(chǎn)并照顧一下老婆孩子. 他老爸在東莞開了廠是個大老板,他自己開的是四五十萬的路虎, 算是一個富二代吧 ,但是平時也很節(jié)約,做事也很認(rèn)真為人也很好相處也很樸實 . 不得不說一下我們的老板也是一個90后,真正的富二代,為人大方開朗,做事一絲不茍每天各地到處飛,比我們這些程序員辛苦多了,飯桌上還給我們斟茶倒水平易近人.
回到正題, 我負(fù)責(zé)項目架構(gòu)以及技術(shù),那么我現(xiàn)在就要考慮我們的系統(tǒng)該怎么做,該用什么技術(shù)做.
在A公司的時候,項目主要是由eclipse, java,maven,spring mvc,mybatis前端使用easyui .前后端數(shù)據(jù)交互使用json.接口類似于這樣

這有幾個問題
1 數(shù)據(jù)解析復(fù)雜
2 重復(fù)代碼太多
3 容易出錯
所以并不想沿用以前的方式, 由于核心是spring, 所以在spring 官網(wǎng)瀏覽的時候突然發(fā)現(xiàn)了spring boot這個東西 就點進(jìn)去看看并搭建一個環(huán)境試一下. 雖然無xml配置很強大但是印象最深的還是熱部署,修改代碼不需要重啟.記得以前都是改完代碼,然后重啟tomcat再測試,這樣的話節(jié)省了很多時間.立馬就被spring boot吸引了,然后就是網(wǎng)上找書籍學(xué)習(xí).
從 <<JavaEE開發(fā)的顛覆者 Spring Boot實戰(zhàn)>>這本書里了解到了jhipster這個框架,對它很感興趣,立馬就去官網(wǎng)了解一下并搭建環(huán)境.應(yīng)該是從這里開始才了解到前后端發(fā)展已經(jīng)非常迅速. 不僅僅在是jsp jquery這些東西了也是從這里開始打開了自我學(xué)習(xí),自我探索的大門.
所以現(xiàn)在的核心是學(xué)習(xí)jhipster
1 搭建jhipster框架
2 學(xué)習(xí)前端源碼
3 學(xué)習(xí)后端源碼
4 理解jhipster前后端交互過程
雖然我前幾年專注于后端,心里十分抵觸學(xué)習(xí)前端但是為了完全理解jhipster還是硬著頭皮去學(xué)習(xí). 學(xué)nodejs, npm,angular,webpack,typescript哪里不懂就去百度(現(xiàn)在基本是google) 這也為我后來自己寫自動代碼生成工具打基礎(chǔ).
而后端就主要學(xué)習(xí)到了交互過程的面向?qū)ο笏枷? 數(shù)據(jù)交互還是json但是到達(dá)接口的時候,已經(jīng)被spring準(zhǔn)確來說是jackson轉(zhuǎn)換成對象了,返回的數(shù)據(jù)也是對象,spring會自動轉(zhuǎn)換成json傳遞給前端, 而不像我們以前輸入和輸出參數(shù)都是String, 前端需要拼json后端也需要拼json.
到這里我才真正理解并應(yīng)用面向?qū)ο笏枷?這是非常重要的.
我們系統(tǒng)接口設(shè)計是以表為核心,以用戶表user為例, 那么至少會有4個接口:
1 getList(search : userSearch):List<User>
獲取用戶列表,傳遞的是搜索條件對象,一般是用戶表的字段.
2 getInfo(id:String):User
獲取用戶信息,根據(jù)id返回用戶詳細(xì)信息.注意getList一般只會獲取某些信息.
3 save(user:User):Int
保存用戶信息如果user中的id不為空則為更新,id為空則為新增.
4 delete(id:String):Int
刪除用戶.
如果要以面向?qū)ο蟮乃枷雽戇@樣的接口,那么至少 5個類.
1 UserResource springboot中暴露restful接口.
2 UserService 接口的詳細(xì)邏輯.
3 UserMapper user表的數(shù)據(jù)庫操作(如果有復(fù)雜的sql還需要UserMapper.xml).
4 User 實體類.
5 UserSeacrh 搜索類.
6 UserDto dto的意思是數(shù)據(jù)傳輸對象. 意思是如果接口不需要user實體的那么多字段可以新建一個對象只有部分user字段(已廢棄).
那么既然每一張表都需要這些方法為什么不把它抽象出來,于是就有了
1 BaseModel 每一張表的實體類繼承它.

2 BaseSearch 每一張表的查詢類都繼承它.

3 Result 每一個接口的返回對象都是它.

4 BaseMapper 每一個表的mapper都繼承它.

5 BaseService 每一個表的邏輯實現(xiàn)都繼承它,需要修改的話重載里面的方法即可.主要包括那4個方法的實現(xiàn) .

6 BaseResource

那么實際例子如下. 那么只要繼承寫好了,mapper里的sql寫好了那么這4個接口就已經(jīng)寫好了 .

由于jhipster過于復(fù)雜,我們并不是直接使用它作為項目架構(gòu)而是結(jié)合我們自身的業(yè)務(wù)以及經(jīng)驗, 重新構(gòu)造一個項目架構(gòu).主要是保留了jhipster整體思想以及spring security ,spring aop ,web配置的代碼,增加了對mybaits的集成(當(dāng)時也考慮了很久, 使用mybatis而不使用hibernate和jpa)以及自身業(yè)務(wù)的Base類
那么現(xiàn)在的后臺架構(gòu)是 eclipse , maven, spring boot, mybatis,抽象類 前端使用angular,typescript,bootstrap
剛好學(xué)習(xí)完這些需要做我們的第一個系統(tǒng),這個系統(tǒng)的表的數(shù)量有79個,除去和業(yè)務(wù)無關(guān)的還剩下將近50個也就是說,這50張表都需要建search,model,service,rest,mapper并且每一個表需要寫增刪改查4條sql語句. 那時只有一個后臺人員和2個前端人員.即使時間很緊迫,但我還是放棄寫接口. 優(yōu)先創(chuàng)作 自動代碼生成工具 見另一篇文章.創(chuàng)作成功后果然大大減少了我的工作量,而且也幫前端生成了ts版的model類.
現(xiàn)在的后臺架構(gòu)
eclipse , maven, spring boot, mybatis,抽象類, 自動代碼生成工具
這個已經(jīng)成型,也已經(jīng)開發(fā)了幾個系統(tǒng), 這個就叫架構(gòu)1.0.