架構(gòu)設(shè)計(jì)
- 遵循“先設(shè)計(jì)后開(kāi)發(fā)”的原則,設(shè)計(jì)高于開(kāi)發(fā)
- 設(shè)計(jì)時(shí)應(yīng)確定好時(shí)序圖、UML關(guān)系圖
- 設(shè)計(jì)時(shí)應(yīng)將需求查乒、場(chǎng)景抽象成模型(建模)澜公,并將模型拆分成模塊姆另,形成架構(gòu)
- 模型應(yīng)考慮并兼容后續(xù)需求的迭代開(kāi)發(fā),應(yīng)減少架構(gòu)的修改
- 模塊之間應(yīng)減少依賴關(guān)系坟乾,并盡量以接口的方式形成依賴
- 設(shè)計(jì)時(shí)應(yīng)考慮測(cè)試用例迹辐,“測(cè)試驅(qū)動(dòng)開(kāi)發(fā)”,以測(cè)試用例來(lái)檢驗(yàn)功能開(kāi)發(fā)的完成甚侣。
類的設(shè)計(jì)
- 職責(zé)單一明吩,每個(gè)類應(yīng)集中處理某個(gè)方面的事務(wù)
- 短小精悍,每個(gè)類的代碼行數(shù)應(yīng)該控制在1000行代碼以內(nèi)殷费,提高可讀性
- 封裝性印荔,應(yīng)盡量減少對(duì)外暴露。非必要暴露的方法不要暴露详羡。非數(shù)據(jù)類的成員變量不能直接對(duì)外暴露仍律,而要提供公共的方法。
- 功能類應(yīng)盡量實(shí)現(xiàn)于接口
- 因某種特征導(dǎo)致多個(gè)函數(shù)的實(shí)現(xiàn)發(fā)生變化实柠,應(yīng)考慮將這個(gè)特征以繼承的關(guān)系進(jìn)行表現(xiàn)水泉,不同的特征,不同的子類
- 為了提高閱讀性窒盐,類中代碼的順序上應(yīng)該類型草则、功能進(jìn)行排列,即按先變量后函數(shù)蟹漓。變量的順序炕横,應(yīng)按公有、私有葡粒、靜態(tài)份殿、類型排序。函數(shù)的順序應(yīng)按照構(gòu)造函數(shù)嗽交、功能進(jìn)行排序卿嘲。
- 類名應(yīng)表現(xiàn)出類的功能
函數(shù)的設(shè)計(jì)
- 職責(zé)單一,一個(gè)函數(shù)集中處理一個(gè)功能轮纫。
- 短小精悍腔寡,每個(gè)函數(shù)保持在100行以內(nèi),函數(shù)過(guò)長(zhǎng)是應(yīng)將相應(yīng)的功能抽出來(lái)掌唾。
- 簡(jiǎn)化輸入輸出放前,每個(gè)函數(shù)的參數(shù)應(yīng)控制在3個(gè)以內(nèi)忿磅,盡量保持在一到兩個(gè)。多出來(lái)的參數(shù)凭语,應(yīng)該盡量集中成為成員變量葱她。
- 邏輯緊湊,環(huán)環(huán)相扣似扔。在最合適的位置做判斷吨些,跳轉(zhuǎn),減少代碼的無(wú)用的執(zhí)行炒辉。
- 方法名豪墅、變量名應(yīng)有意義并表現(xiàn)功能
- 減少嵌套,函數(shù)內(nèi)部的嵌套不應(yīng)超過(guò)三層黔寇∨计鳎可通過(guò)將嵌套抽成方法,跳轉(zhuǎn)到另外一個(gè)新的函數(shù)并終止本函數(shù)缝裤,提前返回的方式減少嵌套屏轰。
- 優(yōu)化復(fù)雜的邏輯判斷,應(yīng)將復(fù)雜的邏輯判斷抽成新的方法憋飞。
- 代碼中不能出現(xiàn)重復(fù)的代碼霎苗,重復(fù)的代碼要進(jìn)行整合,可以通過(guò)合并成基類的邏輯或方法榛做,抽成工具類中的方法實(shí)現(xiàn)唁盏。
- Log的設(shè)計(jì)的重要性等同于正常代碼。Log不能暴露用戶的個(gè)人信息瘤睹。應(yīng)在方法的入口處反應(yīng)決定方法結(jié)果的信息升敲,包括參數(shù)信息答倡,和重要內(nèi)部成員變量的信息轰传。Log的長(zhǎng)度不能過(guò)長(zhǎng),內(nèi)部的內(nèi)容應(yīng)該盡量簡(jiǎn)寫瘪撇,并包括盡量的多的信息获茬。避免在循環(huán)內(nèi)部添加Log。Log的設(shè)計(jì)應(yīng)保證任何代碼執(zhí)行過(guò)程有跡可循倔既。
競(jìng)態(tài)關(guān)系的設(shè)計(jì)(多線程的設(shè)計(jì))
以下為功能類的設(shè)計(jì):
- 應(yīng)盡量減少功能類的成員變量
- 容器類型的成員變量應(yīng)該設(shè)置為私有恕曲,不能超過(guò)保護(hù)類型。外部的訪問(wèn)應(yīng)該要通過(guò)特有的方法訪問(wèn)渤涌,特有的方法應(yīng)該同步佩谣。獲取容器內(nèi)容應(yīng)該通過(guò)拷貝的形式。
- 內(nèi)部方法使用成員變量实蓬,不應(yīng)該直接使用茸俭,而應(yīng)該再用方法內(nèi)部的變量保存成員變量的句柄或者值吊履。以保證方法執(zhí)行過(guò)程中句柄或者值的一致性。
- 應(yīng)該減少鎖的粒度调鬓,以減少死鎖的可能以及其它線程可能等待的時(shí)間艇炎。
- 對(duì)于訪問(wèn)頻繁的鎖,應(yīng)考慮將讀鎖和寫鎖拆分