日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
你真的思考過自己寫的代碼為啥這么垃圾嗎?

[[429094]]

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、仙居ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的仙居網(wǎng)站制作公司

大家所在項(xiàng)目組,一定遇到同類操作,但卻有不同做法,尤其是祖?zhèn)鞔a,一眼望去,可謂八仙過海各顯神通。

大部分程序員也覺得團(tuán)隊(duì)開發(fā)應(yīng)該保持編程習(xí)慣的一致性。但普遍理解的一致性都表現(xiàn)在較宏觀層面,比如,數(shù)據(jù)庫(kù)訪問是叫DAO還是叫Mapper,Repository?

團(tuán)隊(duì)雖然也有一些統(tǒng)一標(biāo)準(zhǔn),但落地到編碼,也沒人一直給你 CR,所以要求就不是那么嚴(yán)格了。所以,我們才能欣賞到在代碼寫法百家爭(zhēng)鳴。還是具體看幾個(gè)案例來體會(huì)下吧!

千奇百怪的命名

這段代碼可以了解到目前的分發(fā)渠道:

  • 網(wǎng)站
  • 只在Kindle
  • 全渠道

乍一看,你可能覺得沒啥問題,可我就會(huì)好奇作者:

  • WEBSITE 和 KINDLE_ONLY 分別表示什么?
  • WEBSITE:作品只會(huì)在我們自己網(wǎng)站發(fā)布,KINDLE_ONLY:這部作品只會(huì)在 Kindle 的電子書商店里上架。
  • 二者是不是都表示只能在單獨(dú)一個(gè)渠道發(fā)布?

Yes

  • 既然含義類似,為何不都叫 XXX 或 XXX_ONLY?

(⊙o⊙)…好像也是哦

所以,大家也看到了吧,類似含義的代碼應(yīng)該有一致的名稱,就像很多團(tuán)隊(duì)都會(huì)把業(yè)務(wù)寫到服務(wù)層,各種服務(wù)類類名也都是 XXXService。

不一致的名字,一般都表示不同含義。比如,對(duì)那些非業(yè)務(wù)入口的業(yè)務(wù)組件,它們的名字就會(huì)不同,會(huì)更符合其具體業(yè)務(wù)行為,如BookSender:將作品發(fā)到翻譯引擎。

我料想,這段代碼作者給枚舉值命名時(shí),只分別考慮了應(yīng)該叫啥名,卻忽略了這個(gè)枚舉值在整體中的地位。

至此,重構(gòu)途徑就很明白了:

方案不一致

現(xiàn)在某系統(tǒng)要向另外一個(gè)系統(tǒng)發(fā)請(qǐng)求,需帶一個(gè)時(shí)間戳,把這個(gè)時(shí)間戳按格式轉(zhuǎn)成

String,主要做傳輸用,便于外部系統(tǒng)識(shí)別,也方便開發(fā)調(diào)試。

代碼片段本身實(shí)現(xiàn)沒問題,甚至還考慮到了 SimpleDateFormat 這個(gè)類非線程安全,所以,每次都創(chuàng)建一個(gè)新的 SimpleDateFormat 對(duì)象。

那我為什么還說它是有問題的呢?因?yàn)檫@種寫法是 Java 8 之前的寫法,而我們用的 Java 版本是 Java 8。

現(xiàn)在這是個(gè)Java8項(xiàng)目,完全可以使用 Java 8 的新日期時(shí)間API。所以項(xiàng)目也約定所有日期時(shí)間類型使用新API。

所以,這段代碼本身實(shí)現(xiàn)沒問題,但放在項(xiàng)目整體中,卻沒有和其它部分保持一致。

重構(gòu)成使用新API即可:

一個(gè)項(xiàng)目應(yīng)對(duì)同一個(gè)問題出現(xiàn)多個(gè)解決方案,沒有統(tǒng)一約定,成員會(huì)根據(jù)自己的習(xí)慣隨機(jī)選擇方案,導(dǎo)致方案不一致。還比如判斷字符串是否為空或空串,就有 Guava 和 Apache Commons Lang,都能做同樣事情,所以,程序員也會(huì)根據(jù)自己熟悉程度選擇其中之一來用,造成代碼不一致。

這兩個(gè)程序庫(kù)是很多程序庫(kù)的基礎(chǔ),經(jīng)常因?yàn)橐肓似渌绦驇?kù),相應(yīng)的依賴就出現(xiàn)在我們的代碼中。所以,我們必須約定,哪種做法是我們?cè)陧?xiàng)目中的標(biāo)準(zhǔn)做法,以防出現(xiàn)各自為營(yíng)。

代碼中的不一致

在翻譯引擎中創(chuàng)建作品的代碼:

  • 首先,根據(jù)要處理的作品 ID,獲取其中已審核通過的作品
  • 然后,發(fā)送一個(gè) HTTP 請(qǐng)求在翻譯引擎中創(chuàng)建出這個(gè)作品

看得出來什么問題嗎?

這些代碼不是一個(gè)層次的!首先是獲取審核通過的作品,是個(gè)業(yè)務(wù)動(dòng)作,接下來的三行其實(shí)是在做一件事,也就是發(fā)送創(chuàng)建作品的請(qǐng)求,這三行代碼:

  • 創(chuàng)建請(qǐng)求的參數(shù)
  • 根據(jù)參數(shù)創(chuàng)建請(qǐng)求
  • 最后把請(qǐng)求發(fā)送出去

三行代碼合力完成發(fā)送創(chuàng)建作品的請(qǐng)求,而這件事整體才是個(gè)完整業(yè)務(wù)動(dòng)作。

所以,這個(gè)函數(shù)有的是業(yè)務(wù)動(dòng)作,有的是業(yè)務(wù)動(dòng)作的細(xì)節(jié)。所以重構(gòu)如下:

分清代碼處于不同層次,基本功就是分離關(guān)注點(diǎn)。一旦分解出不同關(guān)注點(diǎn),還可進(jìn)一步調(diào)整代碼的結(jié)構(gòu)。

像前面拆分出來的這個(gè)方法,我們已經(jīng)知道它的作用是發(fā)出一個(gè)請(qǐng)求去創(chuàng)建作品,本質(zhì)上并不屬于這個(gè)業(yè)務(wù)類的一部分。

所以,還可通過引入一個(gè)新模型,將這個(gè)部分調(diào)整出去:

 


網(wǎng)站題目:你真的思考過自己寫的代碼為啥這么垃圾嗎?
標(biāo)題URL:http://m.5511xx.com/article/djjghcd.html