日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java静态方法可能会产生代码异味

發(fā)布時間:2023/12/3 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java静态方法可能会产生代码异味 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
代碼氣味的定義 (來自維基百科):

“程序源代碼中任何可能表明存在更深層問題的癥狀。”

在Java中, 靜態(tài)方法允許您在“類范圍”內(nèi)執(zhí)行代碼,而不是像成員方法這樣的實例范圍。 這意味著,它們依賴于類級別的變量(如果有),傳遞給靜態(tài)方法的參數(shù)或任何其他全局可訪問的數(shù)據(jù)。 它們不是面向?qū)ο蟮摹?對象具有與之關(guān)聯(lián)的狀態(tài),并且只能通過實現(xiàn)該對象“行為”的方法進行操作。 靜態(tài)方法不在狀態(tài)上操作,它們不是面向?qū)ο蟮?#xff0c;實際上它們是過程式的。

這不好嗎?

不會。盡管Java是面向?qū)ο蟮?#xff0c;但有時還是需要和/或首選Java中的類似于過程的編程。 任何面向?qū)ο蟮恼Z言的真正威力在于能夠在代碼中緊密實現(xiàn)現(xiàn)實生活中的系統(tǒng)模型的能力(請參閱我有關(guān)面向?qū)ο蠼5奈恼?)。 但是,即使在最核心的對象模型中,也很可能會有一些粘合代碼或?qū)⒁赃^程樣式實現(xiàn)的基礎(chǔ)結(jié)構(gòu)代碼。

因此,如果Java中的類似于過程的編程不是“那么糟糕”并且靜態(tài)方法是過程編程的一種形式,那么靜態(tài)方法是否不好?

嗯……答案并不像是“是”或“否”那么簡單,無論您在其他博客上會讀到什么,但我可能會不斷爭論著為什么這實際上是必須在上下文中做出的決定,因此,讓我們重點關(guān)注一下我在Michael Minella博客的“如何模擬靜態(tài)方法”中遇到的一組語句:

“已經(jīng)成為該語言基礎(chǔ)知識的部分(您要做的只是看一下Apache Commons項目以了解這一點)非常糟糕,以測試為名必須不惜一切代價避免。 Gosling(或其團隊中的某人)出于某種原因?qū)⑵浞湃胝Z言中,并且僅由于您的工具集不支持對它的測試是無稽之談而避免使用這些語言。 是時候獲得新的工具集了。”

首先,我想指出的是,僅僅因為某種東西已經(jīng)成為一種語言的基本組成部分,并不意味著它就是“好”或應該做的事情。 查看已檢查的異常以供參考。 我記得EJB 1.x和2.x在過去成為Java EE的“基礎(chǔ)”部分,因此也請參考一下。

其次,盡管我在理論上確實同意Michael的觀點,即由于您的工具不支持某種特定的語言功能而使其愚蠢,但他的前提是靜態(tài)方法。 避免使用靜態(tài)方法是因為您的工具不支持靜態(tài)方法,這根本不是胡說。 實際上,由一些好的測試和/或模擬框架( Mockito是我最喜歡的框架)引起的阻抗類型 )和靜態(tài)方法可以確定地識別為代碼異味。 這并不意味著我們不應該這樣做,而是應該付出更多的努力來理解我們?yōu)槭裁催@樣做,并在存在“更深層次的問題”時探索替代方法。

我想指出,至少有兩種類型的靜態(tài)方法通常不會在測試/模擬框架中表現(xiàn)出太大的阻力。 第一種類型是用作實用程序方法的靜態(tài)方法,就像在許多apache commons庫或您自己的內(nèi)部commons庫中找到的方法一樣。 這些通常是支持特定方法目標的例程,并且將它們模擬/存根到單元測試之外是沒有意義的。 它們是實現(xiàn)的一部分,因此應進行測試。 第二種類型是靜態(tài)方法,用于代替構(gòu)造函數(shù),如Joshua Bloch在他的書《 Effective Java》中所展示的。 靜態(tài)方法的這種使用使您可以使用名稱具有非常描述性的方法來構(gòu)造新對象,以及其他一些優(yōu)點。 第二種靜態(tài)方法的分支可能包括工廠方法,但這取決于上下文。

當單元依靠靜態(tài)方法執(zhí)行超出該單元職責范圍的邏輯時,由于靜態(tài)方法和測試框架阻抗而產(chǎn)生的最明顯的代碼異味。 在這些情況下,您的測試框架將對您不利,因為您無法對范圍外的邏輯進行存根/模擬,因為它是通過靜態(tài)方法“硬編碼”的。 這可以被視為“更深層的問題”,并且是大多數(shù)博客的焦點,這些博客告訴您不要使用靜態(tài)方法,因為測試變得異常困難或不可能。 更改設(shè)計方法以遵循依賴性反轉(zhuǎn)原則是另一種選擇。 對如何測試單元的更好的理解是另一個。

我強烈斷言,在使用靜態(tài)方法的情況下,您可能會從測試框架中得到的回退表示代碼有氣味,而不是您需要嘗試找到一個使用復雜的欺騙手段并將類加載器重新映射作為解決方案的框架。 應該準備評估一種特殊方法在其設(shè)計中的用途和基本缺陷。 Michael的博客文章使讀者太容易采用新的工具/框架,僅因為Java支持靜態(tài)方法并且您當前的測試框架闡明了一個阻抗-在這種情況下,阻抗反映了代碼的味道,需要一些更深入,更批判性的思考。

參考: Java靜態(tài)方法可能是 JCG合作伙伴 Christian Posta在Christian Posta Software博客上的代碼味道 。


翻譯自: https://www.javacodegeeks.com/2012/05/java-static-methods-can-be-code-smell.html

總結(jié)

以上是生活随笔為你收集整理的Java静态方法可能会产生代码异味的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品人妻少妇嫩草av无码专区 | 女生高潮视频在线观看 | 中文字幕无码乱码人妻日韩精品 | 成人在线视频网站 | 91国自产精品中文字幕亚洲 | 亚洲一区二区三区四区 | 精品无码一区二区三区蜜臀 | 久久99久久99精品蜜柚传媒 | 中文字幕av不卡 | 在线观看aaa | 麻豆一区二区三区精品视频 | 九九九九久久久久 | 欧美黄色网络 | 成人va在线观看 | 九九精品在线播放 | 国产乱国产乱老熟300部视频 | 人人模人人爽 | 亚洲av男人的天堂在线观看 | 少妇精品久久久一区二区三区 | 91嫩草视频在线观看 | 农村少妇 | 成人黄色录像 | 密臀久久 | 色婷婷18 | 舌奴调教日记 | 亚洲国产精品毛片av不卡在线 | 欧美精品一区二区三区视频 | 日韩视频免费观看高清完整版在线观看 | 日韩精品www| 天天操天天操天天 | 91丨九色丨国产 | 美女免费看片 | 国产在线视频一区二区三区 | www.操com | 免费视频一区二区 | 欧美天堂在线视频 | caoporen在线 | 美女黄页在线观看 | 久草电影网站 | 久久77 | 久久久久成人精品无码 | 黄色一区二区三区四区 | 亚洲久久影院 | 欧美色欧美色 | 五月婷婷激情网 | 狠狠亚洲 | 午夜视频一区二区 | 亚洲一在线 | 蜜桃综合网 | 影院一区| 精品无码人妻一区二区三区品 | www.欧美激情 | 久久中文字幕网 | 超碰导航 | 亚洲国产精品免费在线观看 | 深夜福利麻豆 | 欧美一区二区高清视频 | 欧美色亚洲 | www久久| 激情综合小说 | 久久国语 | 国产免费av网址 | 中文字幕自拍偷拍 | 蜜桃视频在线观看一区 | 亚洲高清视频在线 | 特大黑人娇小亚洲女 | 久久久久人 | 男女啪啪网站 | 天海翼av| 琪琪原网址 | 美腿丝袜亚洲色图 | 亚洲性图视频 | 国产精品入口麻豆 | 中文字幕av一区二区三区 | 插综合| 少妇又色又爽 | 欧州一区| 欧美视频日韩 | 欧美亚洲一区二区三区四区 | 欧美熟妇精品久久久久久 | 成人免费毛片aaaaaa片 | 人人射人人插 | 91麻豆产精品久久久久久夏晴子 | 毛片在线免费观看视频 | 激情久久av| 色七七桃花综合影院 | 欧美变态口味重另类 | 精品久久久久久久久久久久久久久久久 | 中国一级免费毛片 | 成人18网站 | 伊人黄网| 欧亚免费视频 | 性一交一乱一伧国产女士spa | 午夜久久网站 | 午夜一级影院 | 国产精品成人aaaa在线 | 亚洲一区 中文字幕 | 香蕉久久网 | 欧美日韩在线观看一区二区三区 |