XP設(shè)計(jì)原則(來(lái)自:xpchina:BrokenDoor)
1 簡(jiǎn)單是關(guān)鍵
簡(jiǎn)單的設(shè)計(jì)總是花較少的時(shí)間完成復(fù)雜的任務(wù)。因此記住要總是做有可能完成的最簡(jiǎn)單的事情。如果你發(fā)現(xiàn)一個(gè)事情很復(fù)雜,用簡(jiǎn)單的事情替換它。與其在復(fù)雜的代碼上消耗更多的時(shí)間,還不如用簡(jiǎn)單的代碼替換,這樣更快,而且更省事。盡可能使事情簡(jiǎn)單化,在執(zhí)行計(jì)劃期間,盡可能不增加新的功能。要記住保持簡(jiǎn)單的設(shè)計(jì)是長(zhǎng)期堅(jiān)持的工作。
2 選擇系統(tǒng)比喻
選擇系統(tǒng)比喻是為了通過(guò)對(duì)類(lèi)和方法的一致命名,為團(tuán)隊(duì)提供一致的畫(huà)面。你的對(duì)象名稱(chēng)對(duì)于系統(tǒng)整體設(shè)計(jì)的理解和代碼重用是非常重要的。如果能取一個(gè)名字,使它容易猜出來(lái),并且還是正確的,那么你就是一個(gè)能節(jié)約時(shí)間的人。選擇一個(gè)涉及廣泛的對(duì)象命名的方法而沒(méi)有詳細(xì)描述,很難獲取對(duì)于系統(tǒng)的認(rèn)識(shí)。
例如克萊斯勒汽車(chē)公司薪水支付系統(tǒng)象生產(chǎn)線那樣被建造了。福特汽車(chē)銷(xiāo)售系統(tǒng)象材料清單那樣被構(gòu)造了。使用基于你本身領(lǐng)域的美麗的比喻,使它為人所知。但是,除非它相當(dāng)簡(jiǎn)單,別選美麗的比喻。
3 CRC 卡片
使用CRC(Class,Responsibilities,Collaboration)卡片來(lái)作為團(tuán)隊(duì)的設(shè)計(jì)。CRC卡的最大價(jià)值在于允許人們從思考過(guò)程模式中脫離出來(lái),更充分的專(zhuān)注于對(duì)象技術(shù)。CRC卡允許整個(gè)項(xiàng)目組對(duì)設(shè)計(jì)做出貢獻(xiàn)。參與系統(tǒng)設(shè)計(jì)的人越多,能夠收集到的好主意也就越多。
個(gè)別的CRC卡被用來(lái)描述對(duì)象。對(duì)象的類(lèi)寫(xiě)在卡的最上邊、責(zé)任在左邊下邊編成表,每個(gè)責(zé)任的右邊是協(xié)作的類(lèi)列表。因?yàn)橐郧癈RC會(huì)議是大家全力參與的,通常只需要很少的有類(lèi)名的卡片,實(shí)際上沒(méi)有寫(xiě)出完整的卡片,所以,我們說(shuō)“要寫(xiě)”。這個(gè)例子顯示咖啡制造商問(wèn)題的一部分。
CRC會(huì)議繼續(xù)進(jìn)行,一些人模擬系統(tǒng)和對(duì)象交流,把消息傳給其他的對(duì)象。通過(guò)一步步處理弱點(diǎn),問(wèn)題很容易地被解決。設(shè)計(jì)選擇可以通過(guò)做建議的模擬實(shí)驗(yàn)迅速地做出決定。
如果你發(fā)現(xiàn)很多人在講話并且移動(dòng)卡片,立即簡(jiǎn)單的限制站著的人數(shù),把卡片移到下一人。當(dāng)一個(gè)人座下的時(shí)候,其它的人可以站起來(lái)。自由討論會(huì)議這項(xiàng)工作,常常發(fā)生的情況就像當(dāng)艱難的問(wèn)題最終被解答的時(shí)候,開(kāi)發(fā)組變得吵鬧一樣。
CRC卡受到的最大的批評(píng)之一是缺乏有記錄的設(shè)計(jì)。CRC卡使設(shè)計(jì)看上去顯而易見(jiàn),所以這通常不需要。應(yīng)該要求永久性的記錄,每一個(gè)類(lèi)一張卡,每個(gè)卡作為文檔詳細(xì)記錄和保留。一旦預(yù)想已經(jīng)建立和運(yùn)行,在一段時(shí)間內(nèi),設(shè)計(jì)被人記住了。
4 道釘解決方案
為了對(duì)技術(shù)或設(shè)計(jì)的難題的做出解答,產(chǎn)生道釘解決方案。道釘解決方案是一個(gè)探究潛在解決方案的非常簡(jiǎn)單的程序。構(gòu)造一個(gè)系統(tǒng),僅僅專(zhuān)注于檢查出現(xiàn)的問(wèn)題,忽略所有其它的方面大部分的道釘不會(huì)保持的足夠好,所以,要打算扔掉它。使用道釘?shù)哪繕?biāo)是減少技術(shù)性問(wèn)題的風(fēng)險(xiǎn),或者,增加用戶故事
評(píng)估的可靠性。當(dāng)技術(shù)性的困難阻礙系統(tǒng)開(kāi)發(fā)的時(shí)候,在這個(gè)難題上配備一對(duì)開(kāi)發(fā)者,給上一星期或兩個(gè)星期的時(shí)間以減少潛在的危險(xiǎn)。
5 不要過(guò)早地增加功能
保持系統(tǒng)的整潔,把你猜想的額外的素材以后加入。只有10%的額外素材得到使用,所以你在浪費(fèi)90%的時(shí)間。因?yàn)槲覀兠靼自鯓釉黾樱蛘呶覀兿胧?/FONT>系統(tǒng)變得更好,所以我們都被誘惑到現(xiàn)在增加功能而不是以后。現(xiàn)在增加功能,似乎更快。但是,我們需要常常提醒自己:實(shí)際上我們不需要它。額外的功能將總是使我們開(kāi)發(fā)變慢,而且浪費(fèi)我們的資源。把眼光放到將來(lái)的需求和額外的適應(yīng)性上。只關(guān)注于今天的進(jìn)度。
6 及時(shí)地重新構(gòu)造
在軟件變的不適用以后很長(zhǎng)時(shí)間,我們的算機(jī)程序員仍然保持設(shè)計(jì)不變。我們繼續(xù)使用和重用很長(zhǎng)時(shí)間沒(méi)有維護(hù)的代碼,因?yàn)樵谀撤N方式下還能繼續(xù)工作,我們害怕修改它。但是,這樣去做真的值得嗎?極端編程(XP)認(rèn)為不是這樣。當(dāng)我們除掉冗余,刪除未使用的功能,更新陳舊設(shè)計(jì)的時(shí)候,我們進(jìn)行
重新構(gòu)造(refactor)。貫穿整個(gè)項(xiàng)目生命周期的重構(gòu)工作節(jié)約了時(shí)間,保證了質(zhì)量。
為了保持設(shè)計(jì)的簡(jiǎn)單,避免不必要的混亂和復(fù)雜,及時(shí)重構(gòu)。保持代碼的簡(jiǎn)潔、明了,以便它更容易理解、修改和擴(kuò)展。確認(rèn)每件事情都被表示一次,并且只一次。結(jié)果,花更少的時(shí)間產(chǎn)生更好的系統(tǒng)。
重構(gòu)有幾個(gè)要點(diǎn)。首先,很難,因?yàn)槟惚仨毮軌蚍砰_(kāi)你想象中的完美的設(shè)計(jì),接受你通過(guò)重構(gòu)偶然發(fā)現(xiàn)的設(shè)計(jì)。你必須認(rèn)識(shí)到你想象的設(shè)計(jì)只是好向?qū)Х较颍瑢?shí)際上馬上會(huì)變得陳舊。
為了吃到大量的樹(shù)葉,毛蟲(chóng)是一個(gè)完美的設(shè)計(jì),但是,它不能找到配偶,它在計(jì)劃找到它的同類(lèi)以前,必須把自己變成一只蝴蝶。放棄你認(rèn)為系統(tǒng)應(yīng)該是什么或不是什么的想法,試著留心在你面前出現(xiàn)的新的設(shè)計(jì)。
簡(jiǎn)單的設(shè)計(jì)總是花較少的時(shí)間完成復(fù)雜的任務(wù)。因此記住要總是做有可能完成的最簡(jiǎn)單的事情。如果你發(fā)現(xiàn)一個(gè)事情很復(fù)雜,用簡(jiǎn)單的事情替換它。與其在復(fù)雜的代碼上消耗更多的時(shí)間,還不如用簡(jiǎn)單的代碼替換,這樣更快,而且更省事。盡可能使事情簡(jiǎn)單化,在執(zhí)行計(jì)劃期間,盡可能不增加新的功能。要記住保持簡(jiǎn)單的設(shè)計(jì)是長(zhǎng)期堅(jiān)持的工作。
2 選擇系統(tǒng)比喻
選擇系統(tǒng)比喻是為了通過(guò)對(duì)類(lèi)和方法的一致命名,為團(tuán)隊(duì)提供一致的畫(huà)面。你的對(duì)象名稱(chēng)對(duì)于系統(tǒng)整體設(shè)計(jì)的理解和代碼重用是非常重要的。如果能取一個(gè)名字,使它容易猜出來(lái),并且還是正確的,那么你就是一個(gè)能節(jié)約時(shí)間的人。選擇一個(gè)涉及廣泛的對(duì)象命名的方法而沒(méi)有詳細(xì)描述,很難獲取對(duì)于系統(tǒng)的認(rèn)識(shí)。
例如克萊斯勒汽車(chē)公司薪水支付系統(tǒng)象生產(chǎn)線那樣被建造了。福特汽車(chē)銷(xiāo)售系統(tǒng)象材料清單那樣被構(gòu)造了。使用基于你本身領(lǐng)域的美麗的比喻,使它為人所知。但是,除非它相當(dāng)簡(jiǎn)單,別選美麗的比喻。
3 CRC 卡片
使用CRC(Class,Responsibilities,Collaboration)卡片來(lái)作為團(tuán)隊(duì)的設(shè)計(jì)。CRC卡的最大價(jià)值在于允許人們從思考過(guò)程模式中脫離出來(lái),更充分的專(zhuān)注于對(duì)象技術(shù)。CRC卡允許整個(gè)項(xiàng)目組對(duì)設(shè)計(jì)做出貢獻(xiàn)。參與系統(tǒng)設(shè)計(jì)的人越多,能夠收集到的好主意也就越多。
個(gè)別的CRC卡被用來(lái)描述對(duì)象。對(duì)象的類(lèi)寫(xiě)在卡的最上邊、責(zé)任在左邊下邊編成表,每個(gè)責(zé)任的右邊是協(xié)作的類(lèi)列表。因?yàn)橐郧癈RC會(huì)議是大家全力參與的,通常只需要很少的有類(lèi)名的卡片,實(shí)際上沒(méi)有寫(xiě)出完整的卡片,所以,我們說(shuō)“要寫(xiě)”。這個(gè)例子顯示咖啡制造商問(wèn)題的一部分。
CRC會(huì)議繼續(xù)進(jìn)行,一些人模擬系統(tǒng)和對(duì)象交流,把消息傳給其他的對(duì)象。通過(guò)一步步處理弱點(diǎn),問(wèn)題很容易地被解決。設(shè)計(jì)選擇可以通過(guò)做建議的模擬實(shí)驗(yàn)迅速地做出決定。
如果你發(fā)現(xiàn)很多人在講話并且移動(dòng)卡片,立即簡(jiǎn)單的限制站著的人數(shù),把卡片移到下一人。當(dāng)一個(gè)人座下的時(shí)候,其它的人可以站起來(lái)。自由討論會(huì)議這項(xiàng)工作,常常發(fā)生的情況就像當(dāng)艱難的問(wèn)題最終被解答的時(shí)候,開(kāi)發(fā)組變得吵鬧一樣。
CRC卡受到的最大的批評(píng)之一是缺乏有記錄的設(shè)計(jì)。CRC卡使設(shè)計(jì)看上去顯而易見(jiàn),所以這通常不需要。應(yīng)該要求永久性的記錄,每一個(gè)類(lèi)一張卡,每個(gè)卡作為文檔詳細(xì)記錄和保留。一旦預(yù)想已經(jīng)建立和運(yùn)行,在一段時(shí)間內(nèi),設(shè)計(jì)被人記住了。
4 道釘解決方案
為了對(duì)技術(shù)或設(shè)計(jì)的難題的做出解答,產(chǎn)生道釘解決方案。道釘解決方案是一個(gè)探究潛在解決方案的非常簡(jiǎn)單的程序。構(gòu)造一個(gè)系統(tǒng),僅僅專(zhuān)注于檢查出現(xiàn)的問(wèn)題,忽略所有其它的方面大部分的道釘不會(huì)保持的足夠好,所以,要打算扔掉它。使用道釘?shù)哪繕?biāo)是減少技術(shù)性問(wèn)題的風(fēng)險(xiǎn),或者,增加用戶故事
評(píng)估的可靠性。當(dāng)技術(shù)性的困難阻礙系統(tǒng)開(kāi)發(fā)的時(shí)候,在這個(gè)難題上配備一對(duì)開(kāi)發(fā)者,給上一星期或兩個(gè)星期的時(shí)間以減少潛在的危險(xiǎn)。
5 不要過(guò)早地增加功能
保持系統(tǒng)的整潔,把你猜想的額外的素材以后加入。只有10%的額外素材得到使用,所以你在浪費(fèi)90%的時(shí)間。因?yàn)槲覀兠靼自鯓釉黾樱蛘呶覀兿胧?/FONT>系統(tǒng)變得更好,所以我們都被誘惑到現(xiàn)在增加功能而不是以后。現(xiàn)在增加功能,似乎更快。但是,我們需要常常提醒自己:實(shí)際上我們不需要它。額外的功能將總是使我們開(kāi)發(fā)變慢,而且浪費(fèi)我們的資源。把眼光放到將來(lái)的需求和額外的適應(yīng)性上。只關(guān)注于今天的進(jìn)度。
6 及時(shí)地重新構(gòu)造
在軟件變的不適用以后很長(zhǎng)時(shí)間,我們的算機(jī)程序員仍然保持設(shè)計(jì)不變。我們繼續(xù)使用和重用很長(zhǎng)時(shí)間沒(méi)有維護(hù)的代碼,因?yàn)樵谀撤N方式下還能繼續(xù)工作,我們害怕修改它。但是,這樣去做真的值得嗎?極端編程(XP)認(rèn)為不是這樣。當(dāng)我們除掉冗余,刪除未使用的功能,更新陳舊設(shè)計(jì)的時(shí)候,我們進(jìn)行
重新構(gòu)造(refactor)。貫穿整個(gè)項(xiàng)目生命周期的重構(gòu)工作節(jié)約了時(shí)間,保證了質(zhì)量。
為了保持設(shè)計(jì)的簡(jiǎn)單,避免不必要的混亂和復(fù)雜,及時(shí)重構(gòu)。保持代碼的簡(jiǎn)潔、明了,以便它更容易理解、修改和擴(kuò)展。確認(rèn)每件事情都被表示一次,并且只一次。結(jié)果,花更少的時(shí)間產(chǎn)生更好的系統(tǒng)。
重構(gòu)有幾個(gè)要點(diǎn)。首先,很難,因?yàn)槟惚仨毮軌蚍砰_(kāi)你想象中的完美的設(shè)計(jì),接受你通過(guò)重構(gòu)偶然發(fā)現(xiàn)的設(shè)計(jì)。你必須認(rèn)識(shí)到你想象的設(shè)計(jì)只是好向?qū)Х较颍瑢?shí)際上馬上會(huì)變得陳舊。
為了吃到大量的樹(shù)葉,毛蟲(chóng)是一個(gè)完美的設(shè)計(jì),但是,它不能找到配偶,它在計(jì)劃找到它的同類(lèi)以前,必須把自己變成一只蝴蝶。放棄你認(rèn)為系統(tǒng)應(yīng)該是什么或不是什么的想法,試著留心在你面前出現(xiàn)的新的設(shè)計(jì)。
posted on 2006-02-19 21:07 benchensz 閱讀(739) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): XP極限編程體驗(yàn)