在成為大神之前墙贱,請(qǐng)先苛刻的要求自己

一、前言

俗話說(shuō)贱傀,細(xì)節(jié)決定成敗,每個(gè)成功的人伊脓,除了天賦府寒,其實(shí)更重要的魁衙,是毅力,是對(duì)自己近乎苛刻的要求株搔,而這種要求剖淀,能夠讓你更加快速的前行,避免前行道路上的很多彎路纤房。

  • 作為一個(gè)技術(shù)開(kāi)發(fā)人員纵隔,規(guī)范化的要求自己,顯得更加的重要與迫切:

    • 軟件開(kāi)發(fā)是一門(mén)工程學(xué)科

    由于軟件行業(yè)的特殊性炮姨,即它的工程性捌刮,對(duì)于規(guī)范的要求,就更高一層了舒岸,只有完整性绅作、細(xì)節(jié)性等各方面的嚴(yán)格把控,才能讓這個(gè)工程更加穩(wěn)定蛾派,bug率更少俄认。(你要沒(méi)有這樣要求過(guò)自己,在一天洪乍、一周眯杏、甚至一個(gè)月內(nèi),零bug壳澳,有這樣的魄力嗎岂贩?)

    • 技術(shù)創(chuàng)新、更新钾埂、淘汰速度急快

    估計(jì)每一個(gè)軟件開(kāi)發(fā)者都很清楚河闰,在信息化技術(shù)飛速發(fā)展的當(dāng)代,一門(mén)技術(shù)的更新褥紫、發(fā)展姜性、以及淘汰整個(gè)周期是很短很短的,而一門(mén)又一門(mén)新的技術(shù)問(wèn)世的速度髓考,確實(shí)及其的驚人部念,此時(shí),對(duì)于每一個(gè)軟件開(kāi)發(fā)者來(lái)說(shuō)氨菇,都是一種極大的挑戰(zhàn)儡炼,而這種挑戰(zhàn),只會(huì)愈演愈烈查蓉,所以乌询,如何快速的掌握一門(mén)新的技術(shù),是一個(gè)軟件開(kāi)發(fā)者必備的能力豌研,而好的習(xí)慣妹田,即規(guī)范唬党,則是處處相同的,只要沿著這條規(guī)范化的路前行鬼佣,會(huì)在學(xué)習(xí)應(yīng)用中少走好多彎路驶拱,更加快捷的前行。

二晶衷、代碼開(kāi)發(fā)規(guī)范

1蓝纲、命名開(kāi)發(fā)規(guī)范

  • 包名命名規(guī)范:

包,在java開(kāi)發(fā)中是不可避免的晌纫,而好的包命名税迷,會(huì)使得程序?qū)哟谓Y(jié)構(gòu)明確,讓程序的可讀性更好缸匪,團(tuán)隊(duì)協(xié)作也變得更加簡(jiǎn)單翁狐,而且,會(huì)使得項(xiàng)目的體系結(jié)構(gòu)非常的明了易懂凌蔬,讓開(kāi)發(fā)中可能因?yàn)榻涣饕约袄斫馄疃鴮?dǎo)致的代碼冗余性高露懒、重用性差等問(wèn)題得到很好的解決。除此只為砂心,會(huì)讓項(xiàng)目的整體架構(gòu)層次清晰易懂懈词。

命名方式推薦: 業(yè)務(wù)領(lǐng)域名.子系統(tǒng)名.層名(最好都采用標(biāo)準(zhǔn)的英文命名,切記中文拼音以及二義性詞語(yǔ)命名)

  • SV辩诞、DAO坎弯、ACTION的類(lèi)名命名規(guī)范

    ** 命名規(guī)范推薦:**以英文單詞取名,首字母必須大寫(xiě)译暂,多個(gè)英文單詞以大寫(xiě)字母間隔抠忘,避免使用單詞的縮寫(xiě),除非它的縮寫(xiě)已經(jīng)廣為人知外永,如HTTP崎脉。類(lèi)名中不允許'_'、 '-'等符號(hào)伯顶。

    • 1) SV接口和實(shí)現(xiàn)類(lèi)命名規(guī)范

    接口類(lèi):xxxSV.java囚灼;
    實(shí)現(xiàn)類(lèi):xxxSVImpl.java

    • 2) DAO接口和實(shí)現(xiàn)類(lèi)命名規(guī)范

    接口類(lèi):xxxDAO.java;
    實(shí)現(xiàn)類(lèi):xxxDAOImpl.java

    • 3) ACTION接口和實(shí)現(xiàn)類(lèi)命名規(guī)范

    類(lèi)名:xxxACTION.java

  • 參數(shù)的命名規(guī)范

    • 1) 基本類(lèi)型的變量

基本類(lèi)型有int祭衩、long灶体、boolean、double掐暮、short蝎抽、float在定義變量時(shí),需要體現(xiàn)出基本對(duì)象是什么類(lèi)型路克。

單個(gè)對(duì)象在定義的變量后加上基本類(lèi)型首字母大寫(xiě) : int abcI = 0 ; long abcL = 0L ;
數(shù)組對(duì)象在定義的變量后加上基本類(lèi)型的首字母大寫(xiě)和大寫(xiě)的“S” : int[] abcIS = {0,1} ; Long[] abcLS ={0L ,1L} ;

* **2)  單個(gè)變量命名規(guī)范**

> 直接將收字母小寫(xiě)织中,其他不變  

參數(shù)名稱(chēng)需要體現(xiàn)出屬性代表的意義  :“prodInstIdList”,此參數(shù)是個(gè)List锥涕,存放的是產(chǎn)品實(shí)例ID

StringBuffer prodInstIdStringBuffer = new StringBuffer();
String prodInstIdString = "";
List prodInstIdList = new ArrayList();
Set prodInstIdSet = new HashSet();
Map prodInstIdMap = new HashMap();
  • 3) 數(shù)組命名規(guī)范

    若定義類(lèi)前有“I”,需要去除“I”后首字母小寫(xiě)狭吼;如果沒(méi)有“I”,直接首字母小寫(xiě)殖妇。結(jié)尾統(tǒng)一使用小寫(xiě)“s”結(jié)尾刁笙。

    GbatchQurryParameterInfoBean[] gbatchQurryParameterInfoBeans = null;
    IgbatchQurryParameterInfoValue[] gbatchQurryParameterInfoValues = null;

  • 4) 類(lèi)引用對(duì)象名稱(chēng)命名規(guī)范

    在方法中,如果使用到其他服務(wù)的方法谦趣,需要通過(guò)ServiceFactory.getService方法獲取相應(yīng)的對(duì)象疲吸。對(duì)象命名格式采用統(tǒng)一標(biāo)準(zhǔn),接口類(lèi)名去除“I”后首字母小寫(xiě)前鹅,具體如下:

    IOrderQuerySV orderQuerySV = (IOrderQuerySV)ServiceFactory.getService(IOrderQuerySV.class);

  • 5) 方法名稱(chēng)命名規(guī)范

    方法命名時(shí)摘悴,需要表明此方法的處理的功能,并且首字母小寫(xiě)舰绘。例如:dealXml蹂喻,可以從方法名稱(chēng)看出是處理XML報(bào)文的方法。
    表的操作方法需要體現(xiàn)出操作類(lèi)型

    I捂寿、 單個(gè)和批量保存方法
    例如:saveBean/saveBeans
    II口四、 查詢(xún)方法
    例如:queryBeansByMap 不要用getBeansByMap
    III、 更新方法
    例如:updateBean
    IV秦陋、 刪除方法
    例如:deleteBean

2蔓彩、格式規(guī)范

  • TAB空格的數(shù)量。編輯器上的TAB空格數(shù)量統(tǒng)一取值為4驳概;

  • 換行赤嚼, 每行120字符;

  • if語(yǔ)句的嵌套層數(shù)3層以?xún)?nèi)顺又。If和else if更卒、else 配合使用時(shí),如果超過(guò)三個(gè)待榔,改成switch…case…實(shí)現(xiàn)逞壁;

  • 匿名內(nèi)部類(lèi)20行以?xún)?nèi),太長(zhǎng)的匿名內(nèi)部類(lèi)影響代碼可讀性锐锣,建議重構(gòu)為命名的(普通)內(nèi)部類(lèi)腌闯;

  • 文件長(zhǎng)度2000行以?xún)?nèi);

  • 方法長(zhǎng)度150行以?xún)?nèi)雕憔;

  • 邏輯上相關(guān)序代碼與其前后之程序代碼間應(yīng)以空白行加以分隔姿骏;在注釋段與程序段、以及不同程序段插入空行斤彼。提高可讀性分瘦;

  • 方法(構(gòu)造器)參數(shù)在5個(gè)以?xún)?nèi) 蘸泻,太多的方法(構(gòu)造器)參數(shù)影響代碼可讀性〕懊担考慮用值對(duì)象代替這些參數(shù)或重新設(shè)計(jì)悦施;

  • 布爾表達(dá)式中的布爾運(yùn)算符(&&,||)的個(gè)數(shù)每行不超過(guò)3個(gè),超過(guò)3個(gè)去团,可以“&&抡诞,||”打頭換行;

  • if和for土陪、while等關(guān)鍵字的排版規(guī)范:

    關(guān)鍵字后需要以空格隔開(kāi)昼汗,if、for鬼雀、while后面包含的內(nèi)容需要用“{}”包括

  • 代碼禁止使用“Ctrl+Shift+F”進(jìn)行(如果自定義了長(zhǎng)度之后顷窒,按照個(gè)人習(xí)慣,可以很好的使用);

3源哩、調(diào)用規(guī)范

一般調(diào)用層次圖
一般調(diào)用層次圖

4鞋吉、異常拋出規(guī)范

  • 在SV層方法中原則上不允許捕獲異常,先拋出Exception璧疗,再拋出RemoteException異常(如果涉及RemoteException異常)坯辩。

  • 在DAO層方法中原則上不允許捕獲異常,只需要拋出Exception異常崩侠。

  • 在WEB層不允許拋出異常漆魔,必須捕獲,包含在JSP却音、ACTION等中改抡。

  • 當(dāng)捕獲異常之后,嚴(yán)謹(jǐn)再次拋出異常系瓢,因?yàn)檫@樣會(huì)隱藏真正異常的位置阿纤,導(dǎo)致查找問(wèn)題難度增加。

5夷陋、日志打印規(guī)范

常用的文本日志,采用的Log文本日志類(lèi)骗绕,在調(diào)用方式上采用統(tǒng)一的格式規(guī)范藐窄,下面將給出如何定義對(duì)象,如果打印日志

  • 定義類(lèi)屬性對(duì)象酬土,并且是靜態(tài)最終不可修改對(duì)象荆忍;
private static final Log log = LogFactory.getLog(FixNetSmsSVImpl.class);
  • 調(diào)用時(shí),需要注意需要判斷是否是此級(jí)別的日志,如果不是刹枉,不要進(jìn)入打印方法叽唱,提高調(diào)用效率。
if (log.isErrorEnabled()) {
log.error("根據(jù)策劃實(shí)例ID:" + offerInstId + " 微宝、用戶(hù)編號(hào):" + memInsUserValue.getUserId() + " 產(chǎn)品實(shí)例數(shù)據(jù)有誤棺亭!");
}

6、sql變量綁定

  • 代碼開(kāi)發(fā)時(shí)對(duì)于可使用綁定變量的SQL必須使用綁定變量芥吟,對(duì)于特殊SQL侦铜,如使用IN(1,2,3)方式的,采用判斷IN的數(shù)量钟鸵,對(duì)于小于5個(gè)值的,也全部使用綁定變量涤躲,以減少數(shù)據(jù)庫(kù)硬解析(硬解析容易產(chǎn)生大量的HARD PARSE棺耍,并造成library cache pin等待,對(duì)數(shù)據(jù)庫(kù)性能造成影響)种樱,從而提高處理性能蒙袍。

  • 對(duì)于SQL中的使用到的表字段,如字段在ivalue類(lèi)中定義嫩挤,必須使用ivalue類(lèi)中的定義害幅,避免直接使用字段名的情況,以在表結(jié)構(gòu)變更時(shí)能夠快速的定位到影響到的代碼岂昭,增強(qiáng)程序的可維護(hù)性以现。

備注:SQL使用IN時(shí),IN的參數(shù)如果非表關(guān)聯(lián)查詢(xún)時(shí)约啊,參數(shù)最大值是1000邑遏,超過(guò)1000會(huì)出現(xiàn)錯(cuò)誤。

7恰矩、對(duì)象判斷

  • 數(shù)據(jù)對(duì)象是否為空判斷方法
String[] bbb = null;
if ( null == bbb || bbb.length < 1 )
  • 單個(gè)對(duì)象判斷是否為空方法
if ( null == aaa || "".equals(aaa) )
  • 對(duì)象比較

基本類(lèi)型使用“==”记盒,其他的類(lèi)對(duì)象比較使用equals

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市外傅,隨后出現(xiàn)的幾起案子纪吮,更是在濱河造成了極大的恐慌,老刑警劉巖萎胰,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碾盟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡奥洼,警方通過(guò)查閱死者的電腦和手機(jī)巷疼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人嚼沿,你說(shuō)我怎么就攤上這事估盘。” “怎么了骡尽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵遣妥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我攀细,道長(zhǎng)箫踩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任谭贪,我火速辦了婚禮境钟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘俭识。我一直安慰自己慨削,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布套媚。 她就那樣靜靜地躺著缚态,像睡著了一般。 火紅的嫁衣襯著肌膚如雪堤瘤。 梳的紋絲不亂的頭發(fā)上玫芦,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音本辐,去河邊找鬼桥帆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛师郑,可吹牛的內(nèi)容都是我干的环葵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼宝冕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼张遭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起地梨,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤菊卷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后宝剖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體洁闰,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年万细,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扑眉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腰素,靈堂內(nèi)的尸體忽然破棺而出聘裁,到底是詐尸還是另有隱情,我是刑警寧澤弓千,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布衡便,位于F島的核電站,受9級(jí)特大地震影響洋访,放射性物質(zhì)發(fā)生泄漏镣陕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一姻政、第九天 我趴在偏房一處隱蔽的房頂上張望呆抑。 院中可真熱鬧,春花似錦汁展、人聲如沸理肺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至年枕,卻和暖如春炫欺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熏兄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工品洛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人摩桶。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓桥状,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親硝清。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辅斟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,756評(píng)論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法芦拿,內(nèi)部類(lèi)的語(yǔ)法士飒,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法蔗崎,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,598評(píng)論 18 399
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理酵幕,服務(wù)發(fā)現(xiàn),斷路器缓苛,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 文/簡(jiǎn)小白sky 陜西的風(fēng)味小吃中芳撒,涼皮是最受歡迎的品種之一,男女老少皆愛(ài)吃,一年四季都有賣(mài)笔刹,夏天吃的人更多芥备。 西...
    簡(jiǎn)小白sky閱讀 2,068評(píng)論 19 15
  • ## 精華界面不等高cell的搭建 1 . 精華界面搭建,tableview展示數(shù)據(jù)徘熔; 不等高cell(復(fù)雜界面)...
    龍龍_龍閱讀 672評(píng)論 1 5