北大青鳥學(xué)術(shù)部分享
1. 服務(wù)器端必須提供輸入數(shù)據(jù)正確性的驗(yàn)證,客戶端的Javascript驗(yàn)證可以沒有。這是基于安全性的考慮,因?yàn)镴avascript是很容易被繞過的,增加客戶端驗(yàn)證只是為了減少服務(wù)器壓力、界面更加容易使用。
2. 適度使用Session,盡量不要在Session里放很大的集合對象,以免內(nèi)存消耗過大,因?yàn)楹芏嘤脩粼L問的時候會產(chǎn)生很多的Session。參數(shù)傳遞應(yīng)該盡量通過Request。熟悉HTTP有助于更好的理解Session、Cookie、Request等的機(jī)制。
3. 在帶有分頁的查詢界面,盡量不要使用POST方法來傳遞參數(shù),POST傳遞的參數(shù)在地址欄里是看不到的,刷新后會有重新提交表單的提示。使用GET方法傳遞參數(shù)要注意URL的長度不能超過1K。
4. 分層應(yīng)該清晰,一般目前我們分為View(Jsp或FreeMarker加上Action)、Bean(Service)、DAO這么三層,即顯示層、業(yè)務(wù)層、數(shù)據(jù)層。記錄集ResultSet這種只能出現(xiàn)在DAO層中的對象不能出現(xiàn)在Bean(Service)層中,同樣HttpServletRequest這種只能出現(xiàn)在View層的對象也不應(yīng)出現(xiàn)在Bean(Service)層中。這并不是絕對的。
5. 盡量使用簡單SQL,避免兩表以及多表聯(lián)查。多表聯(lián)查會導(dǎo)致數(shù)據(jù)庫壓力大幅增加,而且不利于在內(nèi)存中對部分記錄進(jìn)行緩存,代碼的重用性也難以提高。
6. 避免在循環(huán)里執(zhí)行findXXById這樣的方法,不如執(zhí)行一個findXXByIds這樣的方法一次性把記錄取到Map里。大部分有實(shí)際對象對應(yīng)的表應(yīng)該提供這樣一個方法。
7. 如果使用最原始的jdbc編程的話需要注意資源的正確釋放,在循環(huán)里new出來的Statement或者ResultSet就要在循環(huán)里關(guān)閉。
8. 在編寫SQL進(jìn)行查詢的時候,需要能夠判斷這個SQL是否已經(jīng)使用了索引,避免全表掃描,必要的時候增加索引。
9. 在寫一個方法前,首先查看有沒有相同功能或者很類似功能的方法已經(jīng)有了,尤其是工具類方法,往往已經(jīng)寫過了,避免重復(fù)代碼的產(chǎn)生,發(fā)現(xiàn)重復(fù)代碼及時進(jìn)行處理。如果一段代碼被重復(fù)使用兩遍或以上,那么可以考慮專門寫個方法來放這段代碼,同樣多次使用的常量也應(yīng)該專門定義出來。
10. 在一個方法里并不一定只能有一個return,如果已經(jīng)有結(jié)果了盡早return,沒必要增加嵌套的層次,那樣會導(dǎo)致代碼可讀性不佳,但也不能return太多,代碼看起來比較舒服就可以了。(未完待續(xù))