成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

無需If-Else語句,狀態模式即可編寫干凈可維護的代碼

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

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)。

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

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

[[334050]]

像下面這樣的代碼時代已經一去不復返了:

無需If-Else語句,狀態模式即可編寫干凈可維護的代碼

觸發PTSD警告

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

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

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

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

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

無需If-Else語句,狀態模式即可編寫干凈可維護的代碼

代碼中重構分支邏輯的過程一共有三步:

  • 創建一個抽象基類
  • 將每個狀態實現為繼承自基本狀態的單獨類
  • 讓Booking`類具有私有或內部方法,該方法以狀態基類為參數

演示時間到!

首先,需要一個將繼承所有狀態的基類。

無需If-Else語句,狀態模式即可編寫干凈可維護的代碼

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

其次,為要代表的每個狀態創建單獨的類。

無需If-Else語句,狀態模式即可編寫干凈可維護的代碼

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

最后,預訂類型本身。

無需If-Else語句,狀態模式即可編寫干凈可維護的代碼

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

Q&A

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

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

2. 如何將狀態對象保留在數據庫中?

不,你不想。

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

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

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

[[334051]]

圖源:unsplash

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

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

責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2023-01-27 14:53:03

2024-06-18 18:36:03

2013-04-15 09:02:43

JavaScriptJS

2024-04-07 10:13:57

C++代碼if-else

2021-09-22 11:05:19

JS代碼前端

2022-07-11 08:16:55

策略模式if-else

2021-11-04 08:53:00

if-else代碼Java

2023-06-02 07:30:24

If-else結構流程控制

2022-06-07 09:30:35

JavaScript變量名參數

2022-01-13 10:45:59

if-else代碼Java

2020-12-29 09:16:36

程序員對象開發

2025-04-24 08:40:00

JavaScript代碼return語句

2020-05-13 14:15:25

if-else代碼前端

2022-06-17 09:08:27

代碼Python內置庫

2020-07-15 14:51:39

代碼C+開發

2013-03-06 10:28:57

ifJava

2020-08-27 07:00:00

代碼軟件應用程序

2022-04-12 07:32:40

引擎模式Spring策略模式

2023-03-27 15:05:10

Python技巧

2021-03-10 07:20:43

if-else靜態代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人人玩人人添人人澡欧美 | 国产一区二区三区色淫影院 | 国产粉嫩尤物极品99综合精品 | 亚洲视频欧美视频 | 欧美a区 | 日韩在线观看中文字幕 | 影音先锋久久 | 日韩一区二区三区视频 | 91精品久久久久久久久久入口 | 亚洲欧美国产视频 | 久久精品一二三影院 | 麻豆天堂 | 欧美日韩国产高清 | 久久久久久中文字幕 | 国产第一页在线播放 | 日韩一区二区在线观看视频 | 欧美亚洲国产一区 | 久久久久国产精品一区三寸 | 久久a久久 | 日本欧美黄色片 | 欧美三级在线 | 亚洲精品9999久久久久 | 日韩影院在线观看 | h片在线看 | 日韩午夜电影 | 久久丝袜视频 | 看片网站在线 | 成人天堂噜噜噜 | 亚洲精品一区二区三区在线 | 日本黄色大片免费看 | 黄色毛片在线观看 | 久久99深爱久久99精品 | 成人福利在线视频 | 日韩在线免费播放 | 福利视频亚洲 | 中文字幕视频免费 | 亚洲欧美精品在线观看 | 91精品一区二区三区久久久久久 | 国产视频一区二区 | 天堂网色 | 免费成人高清在线视频 |