引言
過(guò)去幾年中,我們將敏捷方法應(yīng)用于數(shù)據(jù)庫(kù)設(shè)計(jì),總結(jié)出一些技巧,使得當(dāng)應(yīng)用程序發(fā)展時(shí),數(shù)據(jù)庫(kù)也能夠進(jìn)化,這是敏捷方法的一個(gè)重要屬性。我們的方法是通過(guò)持續(xù)集成以及自動(dòng)重構(gòu),通過(guò)數(shù)據(jù)庫(kù)管理人員(DBA)和應(yīng)用開(kāi)發(fā)人員的緊密合作來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù)。這些技巧在應(yīng)用開(kāi)發(fā)的各個(gè)時(shí)期都有效。
1 敏捷方法學(xué)
近年來(lái),出現(xiàn)了一種新的軟件開(kāi)發(fā)方法學(xué)——敏捷方法學(xué)。這給數(shù)據(jù)庫(kù)設(shè)計(jì)提出了一些新的、巨大的需求。這些需求的一個(gè)中心就是進(jìn)化設(shè)計(jì)。在一個(gè)敏捷項(xiàng)目中,需要假定我們并不能事先確定系統(tǒng)的需求,因此在項(xiàng)目的初期有一個(gè)詳細(xì)設(shè)計(jì)階段的想法是不現(xiàn)實(shí)的。系統(tǒng)的設(shè)計(jì)必須隨著軟件的變化而進(jìn)化。敏捷方法,尤其是極限編程(XP),通過(guò)一些實(shí)踐使這種進(jìn)化設(shè)計(jì)成為可能。在數(shù)據(jù)庫(kù)設(shè)計(jì)采用敏捷方法,反復(fù)迭代。
許多人會(huì)懷疑敏捷方法能否用于有大型數(shù)據(jù)庫(kù)組件的系統(tǒng),但我們的確使用了許多敏捷和XP技巧,用于解決基于大型數(shù)據(jù)庫(kù)的項(xiàng)目中的進(jìn)化與迭代問(wèn)題。
引言
過(guò)去幾年中,我們將敏捷方法應(yīng)用于數(shù)據(jù)庫(kù)設(shè)計(jì),總結(jié)出一些技巧,使得當(dāng)應(yīng)用程序發(fā)展時(shí),數(shù)據(jù)庫(kù)也能夠進(jìn)化,這是敏捷方法的一個(gè)重要屬性。我們的方法是通過(guò)持續(xù)集成以及自動(dòng)重構(gòu),通過(guò)數(shù)據(jù)庫(kù)管理人員(DBA)和應(yīng)用開(kāi)發(fā)人員的緊密合作來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù)。這些技巧在應(yīng)用開(kāi)發(fā)的各個(gè)時(shí)期都有效。
1 敏捷方法學(xué)
近年來(lái),出現(xiàn)了一種新的軟件開(kāi)發(fā)方法學(xué)——敏捷方法學(xué)。這給數(shù)據(jù)庫(kù)設(shè)計(jì)提出了一些新的、巨大的需求。這些需求的一個(gè)中心就是進(jìn)化設(shè)計(jì)。在一個(gè)敏捷項(xiàng)目中,需要假定我們并不能事先確定系統(tǒng)的需求,因此在項(xiàng)目的初期有一個(gè)詳細(xì)設(shè)計(jì)階段的想法是不現(xiàn)實(shí)的。系統(tǒng)的設(shè)計(jì)必須隨著軟件的變化而進(jìn)化。敏捷方法,尤其是極限編程(XP),通過(guò)一些實(shí)踐使這種進(jìn)化設(shè)計(jì)成為可能。在數(shù)據(jù)庫(kù)設(shè)計(jì)采用敏捷方法,反復(fù)迭代。
許多人會(huì)懷疑敏捷方法能否用于有大型數(shù)據(jù)庫(kù)組件的系統(tǒng),但我們的確使用了許多敏捷和XP技巧,用于解決基于大型數(shù)據(jù)庫(kù)的項(xiàng)目中的進(jìn)化與迭代問(wèn)題。
本文將介紹一些在數(shù)據(jù)庫(kù)設(shè)計(jì)采用敏捷方法的實(shí)踐。當(dāng)然,這并不是說(shuō)我們已經(jīng)完全解決了數(shù)據(jù)庫(kù)進(jìn)化的問(wèn)題,但是我們想提供一些行之有效的方法。
2 積極應(yīng)對(duì)變化
敏捷編程的一個(gè)顯著特點(diǎn)就是它面對(duì)變化的態(tài)度。對(duì)軟件過(guò)程的一般解釋是盡早理解需求,停止需求的變動(dòng),將這些需求作為設(shè)計(jì)的基礎(chǔ),停止設(shè)計(jì)的變動(dòng),然后開(kāi)始構(gòu)筑體系,這就是瀑布方法——基于計(jì)劃的生命周期。
這種方法通過(guò)大量的前期工作來(lái)減少變化,一旦前期工作完成,需求變化會(huì)引起很大的問(wèn)題。當(dāng)需求變化時(shí),這樣的方法就會(huì)有很大的問(wèn)題,因此需求變動(dòng)是這種過(guò)程的一個(gè)很大的問(wèn)題。
而敏捷編程卻以另外一種方式來(lái)面對(duì)變化、擁抱變化,甚至允許在項(xiàng)目開(kāi)發(fā)的后期發(fā)生變化。盡管變化會(huì)被控制,但是這種態(tài)度會(huì)允許盡可能多的變化。變化部分來(lái)自于項(xiàng)目需求的不穩(wěn)定,部分來(lái)自于要支持變化的商業(yè)環(huán)境來(lái)面對(duì)競(jìng)爭(zhēng)壓力。
為了做到這樣,必須采取不同的設(shè)計(jì)態(tài)度。設(shè)計(jì)不僅僅是一個(gè)階段——在開(kāi)始建筑之前就大部分完成的一個(gè)階段,設(shè)計(jì)是一個(gè)持續(xù)的過(guò)程,與編碼、測(cè)試甚至發(fā)布相關(guān),這是計(jì)劃設(shè)計(jì)與進(jìn)化設(shè)計(jì)的不同之處。敏捷方法的一個(gè)重要貢獻(xiàn)是提出了在可控制方式下的進(jìn)化設(shè)計(jì),提供了控制進(jìn)化設(shè)計(jì)和使其可行的技巧。
敏捷方法的一個(gè)重要特點(diǎn)就是迭代式開(kāi)發(fā),即整個(gè)項(xiàng)目生命周期中運(yùn)行多個(gè)完整的軟件生命周期循環(huán)。敏捷過(guò)程在每次迭代中都會(huì)度過(guò)一個(gè)完整的生命周期,迭代可以完成最終產(chǎn)品的需求子集中編碼、測(cè)試以及集成代碼。敏捷方法迭代時(shí)間較短,通常是一周到兩個(gè)月之間,而且我們更傾向于更短的迭代周期。
當(dāng)使用敏捷方法時(shí),最大的問(wèn)題就是數(shù)據(jù)庫(kù)如何進(jìn)行進(jìn)化設(shè)計(jì)。許多人認(rèn)為數(shù)據(jù)庫(kù)設(shè)計(jì)是前期計(jì)劃的工作,而在后期改變數(shù)據(jù)庫(kù)設(shè)計(jì)計(jì)劃會(huì)引起應(yīng)用軟件的崩潰;在配置以后改變數(shù)據(jù)庫(kù)設(shè)計(jì)計(jì)劃會(huì)導(dǎo)致數(shù)據(jù)遷移問(wèn)題。
在過(guò)去三年我們參加了一個(gè)大型的項(xiàng)目,其中用到了切實(shí)可行的進(jìn)化設(shè)計(jì)的方法。該項(xiàng)目包括100人的項(xiàng)目組,200多張表格,數(shù)據(jù)庫(kù)在一年半的最初開(kāi)發(fā)中一直在進(jìn)化,甚至在為多用戶分發(fā)的過(guò)程中也在進(jìn)化。一開(kāi)始我們一個(gè)月迭代一次,過(guò)了幾個(gè)月之后變?yōu)閮芍艿淮巍?
隨著我們將這些經(jīng)驗(yàn)推廣到項(xiàng)目中越來(lái)越多的部分,從越來(lái)越多的案例中獲得經(jīng)驗(yàn)。同時(shí),我們也從其他敏捷項(xiàng)目中吸收了一些經(jīng)驗(yàn)。
2.1 限制條件
在講述實(shí)踐方法之前,必須指出我們并沒(méi)有解決所有的數(shù)據(jù)庫(kù)進(jìn)化設(shè)計(jì)問(wèn)題,特別是:
(1) 我們是為單獨(dú)的應(yīng)用設(shè)計(jì)一個(gè)應(yīng)用數(shù)據(jù)庫(kù),而不是試圖集成多個(gè)數(shù)據(jù)庫(kù);
(2) 我們沒(méi)有做到24*7的數(shù)據(jù)庫(kù)更新。
雖然很多人認(rèn)為我們無(wú)法解決這個(gè)問(wèn)題,但其實(shí)這些問(wèn)題是可以解決的。當(dāng)然這需要進(jìn)一步的工作,光說(shuō)是不能解決問(wèn)題的。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |