日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

一、背景

1.1、時(shí)間緊任務(wù)重

在之前開(kāi)發(fā)一套公司內(nèi)部系統(tǒng)時(shí)一方面時(shí)間緊前期工作準(zhǔn)備不充分,另一方面也在業(yè)務(wù)對(duì)接及編碼工作的規(guī)范上做得不是很好導(dǎo)致了這套系統(tǒng)僅停留在能用的狀態(tài)下。

1.2、拓展不友好

其中最大的問(wèn)題就是拓展性了。整個(gè)開(kāi)發(fā)整體使用的是:

SpringBoot + shiro + MyBatis + easyPoi + Layui + MySQL5.7(后續(xù)升級(jí)為8.0) + redis + RabbitMQ 的模式。

前后端無(wú)分離。這些其實(shí)都是還好的,問(wèn)題就在于代碼中存在不少的硬編碼,這就導(dǎo)致了對(duì)后續(xù)業(yè)務(wù)拓展支持的不友好!

PS: 能把鍋推到敏捷開(kāi)發(fā)上嗎?不!還不是因?yàn)樽约翰耍。。?/p>

1.3、該來(lái)的總歸是要來(lái)的

最近業(yè)務(wù)有些許變更,于是這些硬編碼部分就整體出問(wèn)題了:不,我們不支持這樣子的!

但是業(yè)務(wù)是不能停下來(lái)等人的,加之項(xiàng)目的重構(gòu)排期比較靠后,所以暫時(shí)只能在原有系統(tǒng)上進(jìn)行調(diào)整。

二、關(guān)于硬編碼

2.1、什么是硬編碼

這里提到的硬編碼不是計(jì)算機(jī)的硬編碼處理,而是軟件編程時(shí)代碼層面的硬編碼(簡(jiǎn)單來(lái)說(shuō)就是死板不支持變通的代碼)。

2.2、常見(jiàn)的硬編碼示例

PS: 僅為偽代碼示例,意思一下就可以了!

① 條件處理上的硬編碼


        if("單據(jù)檢查完成".equals(orderState)){
            System.out.println("XXX單據(jù)檢查完成了!");
        }

JAVA

② 信息處理上的硬編碼


        if(true){
            System.out.println("小明已經(jīng)完成了任務(wù)A!");
        }

Java

③ 返回值上的硬編碼

        
        if("小明".equals(name){
            return "主管職位";
        }

Java

④ 屬性值上的硬編碼


        String orderAddUrl = "http://baigedu.com:8080/order/add";

Java

 

2.3、硬編碼所帶來(lái)的一系列困擾

PS: 簡(jiǎn)單以上述四種情況為例。

① 容易產(chǎn)生條件不匹配的情況導(dǎo)致無(wú)法進(jìn)入條件

比如:項(xiàng)目換人維護(hù)了或與前端對(duì)接時(shí),他在調(diào)用的時(shí)候?qū)懙氖?ldquo;單機(jī)檢察完成”

② 這個(gè)任務(wù)只能是小明完成的?小明在這里只能完成任務(wù)A?小華我要完成任務(wù)B!

③ 小明:我這輩子就只能是個(gè)小主管?瞧誰(shuí)不起呢!

④ 百個(gè)度:我們項(xiàng)目調(diào)整了,現(xiàn)在這個(gè)接口改成了:
Http://baigedu.com:8089/orderAdd

2.4、綜上所述

硬編碼的不好之處竟恐怖如斯!

PS: 同時(shí)我們也不能單一的認(rèn)為硬編碼是不好的。在寫(xiě)單元測(cè)試時(shí)不來(lái)個(gè)硬編碼,在一些定值上(男、女、未知),快速開(kāi)發(fā)時(shí)硬編碼還是有作用的,只是說(shuō)正式開(kāi)發(fā)中可能會(huì)存在一些壞味道...

三、應(yīng)對(duì)性處理

3.1、遍尋硬編碼遺留

因?yàn)橄到y(tǒng)的每一個(gè)模塊都有經(jīng)手,所以問(wèn)題存在之處的整理工作倒是并不復(fù)雜。

3.2、硬編碼模塊重構(gòu)

因?yàn)橐恍┛陀^問(wèn)題本次也只能消除90%的硬編碼部分,整個(gè)項(xiàng)目的完善就暫時(shí)寄托于后續(xù)的項(xiàng)目重構(gòu)了。同時(shí)這90%的硬編碼改造已經(jīng)能滿足當(dāng)下需求及后續(xù)比較友好的拓展性,本著不追求極端完美主義的想法加之整個(gè)改進(jìn)的些許心得遂有此文。

三、規(guī)避硬編碼的一些常用方法

3.1、拒絕定值,使用參數(shù)傳遞

以上情景二如果把 name 和 task 都作為入?yún)?lái)處理,那很輕易的實(shí)現(xiàn)諸如:小花完成了任務(wù)C這項(xiàng)功能。

3.2、枚舉類(lèi)

枚舉類(lèi)是對(duì)拓展友好的,同時(shí)也能規(guī)范數(shù)據(jù)。上述場(chǎng)景一中把狀態(tài)寫(xiě)成枚舉類(lèi)就能很輕松的解決狀態(tài)錯(cuò)誤及狀態(tài)拓展問(wèn)題!

PS: 千萬(wàn)不要把枚舉類(lèi)直接給到前端,因?yàn)椴恢v碼德!

3.3、配置文件

以SpingBoot為例,我們可以把一些使用比較多且不易該的屬性配置的Xml或者Yml中,然后再代碼中使用@Value注解來(lái)使用!

這樣場(chǎng)景四種的不管怎么變我們都可以直接在配置文件中修改,而且只修改一處!

PS: @Value注解不能使用static修飾

3.4、數(shù)據(jù)庫(kù)配置

在上述場(chǎng)景三種,我們可以把小明的信息配置到數(shù)據(jù)庫(kù)中,然后再使用時(shí)讀取數(shù)據(jù)庫(kù)信息。這樣小明以后升職加薪出任CEO迎娶白富美都沒(méi)有問(wèn)題。

(小明的肯定!)

四、后記

其實(shí)整體來(lái)說(shuō)這些都是不好的編碼習(xí)慣或僅考慮到當(dāng)下而沒(méi)有對(duì)后續(xù)的拓展做容錯(cuò)而導(dǎo)致的。

希望我們都能寫(xiě)出一手漂亮的代碼,做一個(gè)講碼德的好開(kāi)發(fā)!

PS: 代碼整潔之道的熟讀都應(yīng)該提上日程了哈!!!

分享到:
標(biāo)簽:編碼
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定