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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
無需If-Else語句,狀態(tài)模式即可編寫干凈可維護的代碼

本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)。

創(chuàng)新互聯(lián)建站專注于成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴謹?shù)膽B(tài)度對待客戶,用專業(yè)的服務創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

If-Else語句我們再熟悉不過了,你可能看過無數(shù)的相關(guān)教程,讀過很多編程書籍,來提升將If-Else用作de facto分支技術(shù)的方法,甚至可能你的默認模式就是使用If-Else。

可以結(jié)束這一切了。在任何新的條件要求下,使用If-Else都會增加復雜性。用狀態(tài)對象來代替If-Else吧。應用狀態(tài)模式,你只需使用專用狀態(tài)對象而無需使用If-Else語句來更改對象行為。

像下面這樣的代碼時代已經(jīng)一去不復返了:

觸發(fā)PTSD警告

你肯定曾經(jīng)寫過更復雜的分支,我也曾是這么做的。上面的分支邏輯甚至還不是很復雜,但如果嘗試添加新條件,事情肯定會越弄越糟。

另外,如果你認為創(chuàng)建新類而非簡單地使用分支語句聽起來很煩人,那么請一定等到實際使用的時候,你會發(fā)現(xiàn)這種方法簡潔而優(yōu)雅。除了“ D”部分之外,它還將使你的代碼庫更加扎實。

那么如何避免混亂的分支代碼呢?

我們將研究如何在生產(chǎn)就緒代碼中替換If-Else分支。這是一個虛構(gòu)的例子,但是方法與我在大型客戶的代碼庫中使用的方法相同。

創(chuàng)建一個非常簡單的Booking類,其中包含一些狀態(tài)。它還有兩個公共方法:Accept()and Cancel().。我盡力繪制了一個圖表,顯示了預訂可能處于的不同狀態(tài)。

代碼中重構(gòu)分支邏輯的過程一共有三步:

  • 創(chuàng)建一個抽象基類
  • 將每個狀態(tài)實現(xiàn)為繼承自基本狀態(tài)的單獨類
  • 讓Booking`類具有私有或內(nèi)部方法,該方法以狀態(tài)基類為參數(shù)

演示時間到!

首先,需要一個將繼承所有狀態(tài)的基類。

請注意,該基類還具有兩種方法,Accept和Cancel——盡管此處將它們標記為內(nèi)部。此外,基態(tài)具有“特殊” EnterState(Booking booking)方法。每當將新狀態(tài)分配給預訂對象時,就會調(diào)用此方法。

其次,為要代表的每個狀態(tài)創(chuàng)建單獨的類。

注意,如上圖所示,每個類如何表示一個狀態(tài)。此外,ExpiredState和CancelledState不會將預訂轉(zhuǎn)換為新狀態(tài)。這兩類在本質(zhì)上與Null Object Pattern非常相似。

最后,預訂類型本身。

看到預訂類型如何簡單地將Accept和Cancel的實現(xiàn)委派給其狀態(tài)對象了嗎?這樣做可以使我們刪除許多條件邏輯,并使每個狀態(tài)僅關(guān)注對自己重要的事情,當前狀態(tài)也有機會將預訂過渡到新狀態(tài)。

Q&A

1. 如何處理新的條件功能?

如果說通常需要使用某些條件檢查來實現(xiàn)新功能,那么現(xiàn)在只需創(chuàng)建一個新的狀態(tài)類即可,你將不再需要費力地處理if-else語句了。

2. 如何將狀態(tài)對象保留在數(shù)據(jù)庫中?

不,你不想。

當將對象保存到例如SQL或NoSQL數(shù)據(jù)庫時,狀態(tài)對象并不重要,這時只有了解對象的狀態(tài)及其應如何映射到列是重要的。你可以將狀態(tài)映射到友好類型名稱,枚舉或整數(shù)。只要你愿意,總有某種方法可以將保存的值轉(zhuǎn)換回狀態(tài)對象。

3. 但是你還在使用If’s嗎?

它們是必不可少的,特別是當用作保護子句時。但If-Else組合是造成可維護性難題的根本原因。

圖源:unsplash

復雜性不是源于你擁有的類的數(shù)量,而是源于這些類承擔的功能。擁有許多專門的類將使你的代碼庫更具可讀性與可維護性,并且從總體上來說,也更易于使用。

適時地和If-Else語句說再見吧!


分享文章:無需If-Else語句,狀態(tài)模式即可編寫干凈可維護的代碼
文章分享:http://www.5511xx.com/article/cdpijgh.html