聊聊我的HTTP框架近況:支持AOP,攔截器,配置文件讀取...
本文轉(zhuǎn)載自微信公眾號(hào)「JavaGuide」,作者Guide哥。轉(zhuǎn)載本文請(qǐng)聯(lián)系JavaGuide公眾號(hào)。
jsoncat:https://github.com/Snailclimb/jsoncat (仿 Spring Boot 但不同于 Spring Boot 的一個(gè)輕量級(jí)的 HTTP 框架)
距離上一次給小伙伴們匯報(bào)簡易版的“Spring Boot”的完成情況已經(jīng)有半個(gè)月了。時(shí)間過得是真特么快啊!
01.這半個(gè)月里,我的 HTTP 框架已經(jīng)支持 AOP、攔截器(也是 AOP 的一種)、配置文件讀取等功能了。 👏
目前的話,整個(gè) HTTP 框架基本已經(jīng)具備我最初想要實(shí)現(xiàn)的全部功能了。也算是兌現(xiàn)了諾言,善始善終了。
功能具體的實(shí)現(xiàn)情況如下:
很多讀者小伙伴可能感覺我寫的比較容易。不過, 說實(shí)話,我中間寫的過程中也遇到了很多問題。為了解決寫這個(gè)框架遇到的一些問題,我熬了很多夜,也早起了很多次。
我不算是奮青。一般情況下,我平時(shí)都是晚上 9 點(diǎn)半之后玩幾把王者榮耀,到了 12 點(diǎn)左右就睡覺了。早晨的話,我一般都是 8 點(diǎn)左右起床。幾乎日日如此。
但是,寫這個(gè) HTTP 框架的時(shí)候,我記得有 3 次我熬夜到凌晨 2 點(diǎn)左右。有 2 個(gè)早晨,因?yàn)橛?ldquo;靈感”,我 5 點(diǎn)多久爬起來寫代碼了。
說這些,不是為了博同情讓大家覺得我寫的多辛苦,也不是表現(xiàn)我有多努力。
這些都是很平常的經(jīng)歷罷了!我覺得大部分程序員都經(jīng)歷過:
- 夜深人靜的時(shí)候,突然自己寫的代碼出了點(diǎn)問題,不解決就不想睡覺。
- 某個(gè)早晨,突然驚醒,靈感爆棚,打開電腦開始寫代碼。
不過,我是真的不推薦大家熬夜!拿我自己來說,每次熬夜就會(huì)導(dǎo)致我第二天甚至是第三天精神不振,嚴(yán)重影響效率。這還只是熬夜的短期影響,長期作息不健康的話,肯定對(duì)身體的摧殘?zhí)貏e大。
道理都懂,不過,大部分小伙伴都像我一樣,還是會(huì)偶爾熬夜。
02.整個(gè)框架的目錄結(jié)構(gòu)如下:
- 框架實(shí)現(xiàn)部分按照不同的功能模塊進(jìn)行組織,比較直觀。
- 提供了完整的框架使用示例,并且還為其編寫了測(cè)試。
03.開源的魅力在于別人可以對(duì)你的項(xiàng)目進(jìn)行反饋,并且,遇到對(duì)你的項(xiàng)目感興趣的朋友,他們還會(huì)幫你一起完善和開發(fā)項(xiàng)目。
拿 jsoncat 來說。jsoncat 開源之后,一位叫做“hellohello-tom”的老哥便參與了進(jìn)來幫忙開發(fā)。
tom 哥代碼寫的很不錯(cuò),幫助 jsoncat 實(shí)現(xiàn)了很多功能!真的非常非常非常感謝!愛你哦!老哥!
我倆因?yàn)檫@個(gè)項(xiàng)目經(jīng)常在微信上交流,或許這就是編程的魅力吧!哈哈哈!
我平時(shí)少在微信聊天的,但是因?yàn)檫@個(gè)開源項(xiàng)目和老哥聊了挺多的。隨便截了兩張圖:
我覺得一個(gè)項(xiàng)目開發(fā)是比較忌諱只有自己一個(gè)人的。每個(gè)人都會(huì)有思維局限,你很難發(fā)現(xiàn)你的代碼需要某些改進(jìn)的地方以及存在的問題。
這也解釋了為什么 Code Review(代碼審查)在軟件開發(fā)過程中這么重要了。
通過 Code Review 可以非常有效提高代碼的整體質(zhì)量,因?yàn)樗鼤?huì)幫助我們發(fā)現(xiàn)代碼中的壞味道以及可能存在問題的地方。
04.其實(shí),單純實(shí)現(xiàn)功能的話費(fèi)不了太多時(shí)間。大部分時(shí)間,我都花在了對(duì)現(xiàn)有代碼的重構(gòu)上。
畢竟我這個(gè) HTTP 框架開源出來的主要目的之一是為了給需要的小伙伴學(xué)學(xué)習(xí),我必須要保證我寫的代碼可讀性。
為此,我在寫代碼的過程中給自己定了以下原則:
- 一切從簡 :能用最少的代碼寫清楚的功能就一定不多用一行代碼。
- 不濫用設(shè)計(jì)模式 :我最初寫代碼的時(shí)候,特別喜歡濫用設(shè)計(jì)模式。自己學(xué)到了什么設(shè)計(jì)模式,就像立馬用到自己的項(xiàng)目上去,即使這個(gè)設(shè)計(jì)模式在當(dāng)前業(yè)務(wù)場(chǎng)景并不適合。這真的是一個(gè)不好的習(xí)慣,不過,在寫這個(gè) HTTP 框架的時(shí)候我刻意避免了這個(gè)問題。目前的話,整個(gè)框架只用到了單例模式、工廠模式、策略模式以及責(zé)任鏈模式。
- 保持代碼結(jié)構(gòu)清晰 : 開源出來的代碼是寫給人看的,代碼結(jié)構(gòu)清晰可以大大減少其他人理解代碼的難度。
- 謹(jǐn)慎抽取工具類 :最開始寫這個(gè)框架的時(shí)候,我抽了很多工具類。到最后發(fā)現(xiàn)很多工具類中的方法,實(shí)際只在某一個(gè)地方用到,并且以后也只可能會(huì)在這一個(gè)地方用到。這個(gè)時(shí)候,我覺得最好的做法就是,將這些工具類方法放到唯一一個(gè)用到這個(gè)方法的類中。這樣整體代碼結(jié)構(gòu)會(huì)更加清晰。
- 不秀技 :最開始寫代碼的時(shí)候,特別喜歡秀技。比如說 Java8 那會(huì)還沒流行的時(shí)候,我寫代碼總想著用 Java 8 的 Lambda 表達(dá)式、函數(shù)式接口等新特性。那時(shí)候,和老師一起做項(xiàng)目的時(shí)候,其他同學(xué)還會(huì)覺得我寫的特別牛逼,因?yàn)樗麄冇X得自己很久才能看懂。但是,我現(xiàn)在覺得當(dāng)時(shí)的做法其實(shí)有別軟件開發(fā)/編程的本質(zhì),編程的本質(zhì)不是說減少代碼量,而是說寫出他人易于理解的代碼,寫出更容易維護(hù)的系統(tǒng)。你寫的代碼不單純是給你自己看的,你還要讓別人看懂,減少別人的閱讀學(xué)習(xí)成本。這個(gè)和我第一點(diǎn)說的一切從簡是不矛盾的。
今天就簡單聊聊這些吧!時(shí)間也不早了!
原文鏈接:https://mp.weixin.qq.com/s/KYcUVM3fzSqzhe2GtK3PiA