|
沒有規(guī)矩不成方圓,一個(gè)優(yōu)秀的代碼架構(gòu)不僅易于開發(fā)和維護(hù),而且是一門管理與執(zhí)行的藝術(shù)。
這幾年來經(jīng)歷了很多項(xiàng)目,對(duì)代碼之間的強(qiáng)耦合及書寫不規(guī)范,維護(hù)性差等問題深惡痛絕。在這里,通過仔細(xì)分析后,結(jié)合自己的編碼習(xí)慣總結(jié)了一套適用于Javaweb項(xiàng)目的前端書寫規(guī)范,與大家分享一下。
ps:感謝阿海的創(chuàng)意,后期整理如下(附文件下載):
一、項(xiàng)目結(jié)構(gòu)
這里和其他項(xiàng)目區(qū)別不大,我將模板抽離出來,更容易分析和理解:
解釋一下:js主要包括extends(引入第三方的js)、module(項(xiàng)目模塊自己的js)、lib(引用包,這里也可以繼續(xù)拆分),module中包含具體的模塊中的js。common.js是核心命名空間的js.
二、common.js
解釋一下,Globals作為全局命名空間,各個(gè)模塊均可以在此命名空間里定義域(如果有不明白的可以自學(xué)下命名空間,這個(gè)文件寫死就行,也不用具體理解)。
三、task.js
這個(gè)文件是模塊中我的項(xiàng)目中任務(wù)模塊的js(例子),模塊級(jí)別的js一般是將頁面中相對(duì)獨(dú)立重要的方法抽離出來的方法,不建議所有頁面js都拿進(jìn)來。
解釋一下:模塊級(jí)別的js 主要包括自己的私有屬性和方法,及對(duì)外暴露的js屬性和方法。這里我們默認(rèn)凡是內(nèi)部私有的前面都加“_”,最后決定哪些方法和屬性暴露出來,是通過構(gòu)造方法constructor來對(duì)外暴露。
四、頁面index.jsp
現(xiàn)在看一下jsp中如何對(duì)頁面js和模塊js是怎么引用的吧,見證解耦和的時(shí)候到了。
解釋一下:頁面需要將common.js與task.js引入,然后初始化,這樣就可以訪問task模塊中對(duì)外暴露的方法和屬性了。
頁面js建議所有的變量發(fā)在一個(gè)變量組中,這樣便于維護(hù)。
頁面中控件的onclick等方法建議在js中統(tǒng)一綁定。
總結(jié):通過上面的配置,最大的好處是對(duì)于項(xiàng)目中頻繁引入js文件,消除了之間的耦合性,而且對(duì)于不同模塊間的同名方法和屬性也不會(huì)互相影響,當(dāng)然最主要的便于持續(xù)的開發(fā)和維護(hù),同時(shí)也是藝術(shù)上的享受。
本文采用了我習(xí)慣的注釋風(fēng)格,當(dāng)然可以因人而異,我的原則是:
1.模塊介紹代碼主要關(guān)注:模塊描述,負(fù)責(zé)人,相關(guān)備注,采用雙星注釋
/**
*
*/
2.對(duì)于模塊下,大區(qū)域的劃分,習(xí)慣采用雙橫線注釋:
//==================================================
//描述:
3.對(duì)于區(qū)域中,方法注釋,通過以往的經(jīng)驗(yàn),不是每個(gè)人都愿意詳細(xì)去寫的,所以我認(rèn)為簡(jiǎn)單明了最好,采用普通注釋:
//代碼描述
//作者備注等信息(不限)
4.對(duì)于區(qū)域中一些重要的方法,或者想?yún)^(qū)分一下,劃定小區(qū)間的,采用星橫線
/****************************描述*****************************/
如果有好的意見大家可以一起討論,如果感覺文章寫得對(duì)自己沒什么幫助,權(quán)當(dāng)一笑了之。
jsp技術(shù):Java Web項(xiàng)目前端規(guī)范(采用命名空間使js深度解耦合),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。