滿足工程設(shè)計(jì)標(biāo)準(zhǔn)的唯一軟件文檔,就是源代碼清單。
一、軟件腐化
在軟件項(xiàng)目中最不穩(wěn)定的就是需求。需求處在一個(gè)持續(xù)變動(dòng)的狀態(tài)之中。這是我們作為開發(fā)人員必須接受的事實(shí)。我們生存在一個(gè)需求不斷變化的世界中,我們的工作是要保證我們的軟件能夠經(jīng)受的住那些變化。如果我們軟件的設(shè)計(jì)由于需求變化了而退化,那么我們就是不敏捷的。
畫外音:當(dāng)你進(jìn)行代碼編寫時(shí),覺得很代碼邏輯很復(fù)雜,停下來(lái),找找其他方向。當(dāng)面臨第一次需求添加時(shí),抓住這個(gè)機(jī)會(huì)改進(jìn)設(shè)計(jì),充分考慮到未來(lái)的可能變化,至少滿足當(dāng)前方向的所有新需求添加。
敏捷開發(fā)人員知道要做什么:
1、遵循敏捷實(shí)踐去發(fā)現(xiàn)問(wèn)題
2、應(yīng)用設(shè)計(jì)原則去診斷問(wèn)題
3、應(yīng)用適當(dāng)?shù)脑O(shè)計(jì)模式解決問(wèn)題
敏捷軟件開發(fā)致力于保持設(shè)計(jì)盡可能的適當(dāng)、干凈。這不是一個(gè)隨便的、暫時(shí)性的工作,這個(gè)是一個(gè)過(guò)程、一個(gè)持續(xù)的應(yīng)用原則、模式以及實(shí)踐來(lái)改進(jìn)軟件的結(jié)構(gòu)和可讀性的過(guò)程。每天、每時(shí)、每分鐘都要盡可能保持軟件干凈、簡(jiǎn)潔富有表現(xiàn)力。
二、單一職責(zé)原則
就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因。
每一個(gè)類都有屬于自己的職責(zé),每一個(gè)職責(zé)都是變化的一個(gè)軸線。當(dāng)需求變化時(shí),該變化會(huì)反映為該類職責(zé)的變化。如果一個(gè)類承擔(dān)多個(gè)職責(zé),那么引起它變化的原因就有多個(gè)。職責(zé)的耦合,一個(gè)職責(zé)的變化可能會(huì)引起這個(gè)類完成其他職責(zé)的能力。
三、開發(fā)封閉原則
軟件實(shí)體應(yīng)該是可以擴(kuò)展的,但是不可修改的。
任何系統(tǒng)在其生命周期中都會(huì)發(fā)生變化,如果我們期望開發(fā)出的系統(tǒng)不會(huì)在第一版就被拋棄,需要牢牢記住這一點(diǎn)。
如果程序的一處改動(dòng)會(huì)引起連鎖反應(yīng),那么設(shè)計(jì)就是僵化的。如果正確應(yīng)用 OCP 原則,那么再進(jìn)行同樣的改動(dòng),只需要添加新的代碼,而不改動(dòng)已經(jīng)正常運(yùn)行的代碼。
特征:
1、對(duì)于擴(kuò)展是開放的
2、對(duì)于更改是封閉的
開發(fā)人員應(yīng)該僅僅對(duì)程序中呈現(xiàn)出頻繁變化的那些部分做出抽象。拒絕不成熟的抽象和抽象本身一樣重要。