?????? A01.定義重構(gòu) 自問自答:要不要當(dāng)前系統(tǒng)重新寫一遍呢? 要不要系統(tǒng)中某個(gè)某塊重新寫一遍呢? 如果回答內(nèi)容”是”. 重構(gòu)就是把舊的系統(tǒng)全部推翻或者部分推翻,開發(fā)新的系統(tǒng)來代替舊的系統(tǒng)或某個(gè)部分.公司案例:第一版公司中php寫的業(yè)務(wù)轉(zhuǎn)JAVA語言開發(fā),屬于整個(gè)系統(tǒng)的重構(gòu).第二版后續(xù)的商標(biāo)注冊(cè)類業(yè)務(wù)進(jìn)行訂單優(yōu)化,后續(xù)的商品模塊進(jìn)行局部重構(gòu);
??????? A05.何時(shí)重構(gòu) 業(yè)務(wù)主導(dǎo):對(duì)當(dāng)前業(yè)務(wù)流程做顛覆性的改變,導(dǎo)致當(dāng)前的系統(tǒng)的實(shí)現(xiàn)不滿足業(yè)務(wù)的要求; 當(dāng)前業(yè)務(wù)系統(tǒng)已經(jīng)無法對(duì)業(yè)務(wù)進(jìn)行有效支持,延誤業(yè)務(wù)的發(fā)展; 當(dāng)前系統(tǒng)的實(shí)現(xiàn)語言需要修改為其他的編程語言去實(shí)現(xiàn). 技術(shù)主導(dǎo):對(duì)當(dāng)前系統(tǒng)的架構(gòu)進(jìn)行調(diào)整
??????? A10.關(guān)鍵維度 做重構(gòu),需要考慮哪些關(guān)鍵性,或者說決定性因素呢? ?哪些關(guān)鍵步驟呢?? x1.業(yè)務(wù)梳理梳理;?? x2.代碼邏輯梳理;? x3.業(yè)務(wù)數(shù)據(jù)遷;? x4.架構(gòu)設(shè)計(jì)
????? A15.不要重構(gòu) 哪些情況下不建議進(jìn)行系統(tǒng)重構(gòu)?? 1.如果系統(tǒng)對(duì)業(yè)務(wù)的后續(xù)支持遠(yuǎn)遠(yuǎn)未到臨界點(diǎn),那么不建議做系統(tǒng)重構(gòu);? 2.如果是小眾領(lǐng)域的公司,其實(shí)切換編程語言做系統(tǒng)重構(gòu)沒有什么價(jià)值,因?yàn)闃I(yè)務(wù)領(lǐng)域決定體量;? 3.如果以搶占市場(chǎng)為目標(biāo)的創(chuàng)業(yè)公司,達(dá)到目標(biāo)體量后再?zèng)Q定是否做重構(gòu); 4.對(duì)于業(yè)務(wù)根本沒有連貫性的產(chǎn)品,不要重構(gòu),因?yàn)橹貥?gòu)后說不準(zhǔn)第二天產(chǎn)品又變化.
????? A20.現(xiàn)實(shí)約束 x1.人力成本, 2.人員更替, 3.業(yè)務(wù)梳理, 4.業(yè)務(wù)迭代, 5.新舊數(shù)據(jù), 6.技術(shù)約束 總結(jié):在人員,業(yè)務(wù),架構(gòu),數(shù)據(jù)四個(gè)關(guān)鍵維度上,如果研發(fā)人員和產(chǎn)品經(jīng)理都是新參與,那么系統(tǒng)重構(gòu)的危險(xiǎn)性比較高,并且人力成本會(huì)非常高. 因?yàn)閷?duì)之前業(yè)務(wù)不熟悉不了解導(dǎo)致業(yè)務(wù)設(shè)計(jì)的缺憾,導(dǎo)致不得不做后期重構(gòu).如果不是財(cái)大氣粗的公司,那么一定要考慮的內(nèi)容是人力成本,將人力放在重要業(yè)務(wù)上;? x2.如果公司人員變動(dòng)不大,產(chǎn)品經(jīng)理或研發(fā)人員對(duì)業(yè)務(wù)都非常熟悉,這是重構(gòu)的完美前提.如果要把業(yè)務(wù)做徹底的變動(dòng),那么對(duì)研發(fā)人員的要求比較高. ?? x3.最糟糕的情況就是曾經(jīng)的產(chǎn)品經(jīng)理或研發(fā)人員都離職,后續(xù)的任務(wù)很挑戰(zhàn)新的產(chǎn)品經(jīng)理和研發(fā)人員的能力;? x4.復(fù)雜業(yè)務(wù),對(duì)于昔日設(shè)計(jì)的產(chǎn)品經(jīng)理不在,很挑戰(zhàn)新來的產(chǎn)品經(jīng)理對(duì)業(yè)務(wù)的梳理;如果有開發(fā)的研發(fā)或者測(cè)試人員,情況還好;如果整體業(yè)務(wù)迭代速度比較高,那么重構(gòu)后的業(yè)務(wù)可能已經(jīng)至于后維護(hù)的舊業(yè)務(wù);需要對(duì)業(yè)務(wù)迭代進(jìn)行必要的延期,否則重構(gòu)無法完成;? x5.如果是新研發(fā)人員,需要對(duì)舊業(yè)務(wù)進(jìn)行了解,數(shù)據(jù)遷移比較痛苦.需要對(duì)新舊數(shù)據(jù)庫做根本的了解.這時(shí)候?qū)ρ邪l(fā)人員的能力要求比較高,否則一定又可能技術(shù)能力約束導(dǎo)致出現(xiàn)各種各樣的數(shù)據(jù)問題[新舊數(shù)據(jù)和技術(shù)約束]; 理想情況下:? y1.舊業(yè)務(wù)拋棄,使用新業(yè)務(wù)模式,但是對(duì)新舊數(shù)據(jù)庫有充分的理解,壓力在技術(shù);? y2.舊業(yè)務(wù)做梳理,然后有之前的研發(fā)人員或之前的產(chǎn)品經(jīng)理,然后做重構(gòu); y3.最差的就是新的研發(fā)人員,新的產(chǎn)品經(jīng)理去做舊系統(tǒng)重構(gòu)
????? A25.難點(diǎn)剖析 x1.業(yè)務(wù)梳理難度: 1.系統(tǒng)使用時(shí)間,如果幾個(gè)月還好,如果幾年那就比較難梳理; 2.簡(jiǎn)單系統(tǒng)需要做業(yè)務(wù)的重構(gòu)嘛?這是個(gè)白癡的問題;3.如果產(chǎn)品不斷向前迭代,那么比較好梳理,因?yàn)橛兄骶€;4.如果經(jīng)歷n手的研發(fā)人員,研發(fā)人員的幫助不會(huì)太多; 5.如果經(jīng)歷n手的測(cè)試人員,那基本上只是粗粒度的脈絡(luò)梳理而已;6.如果經(jīng)歷n手的產(chǎn)品經(jīng)理,基本上產(chǎn)品連貫性不會(huì)太好;? x2.代碼邏輯梳理: 1.如果經(jīng)歷n手的研發(fā)人員,那么代碼邏輯的整理會(huì)比較困難; 2.建議從產(chǎn)品經(jīng)理進(jìn)行業(yè)務(wù)梳理,研發(fā)人員的文檔編寫處理能力一般不怎么地;? x3.業(yè)務(wù)數(shù)據(jù)遷移: 1.如果是n手的研發(fā)人員,數(shù)據(jù)遷移會(huì)是比較頭疼的事情; 2.如果有之前的系統(tǒng)開發(fā)者那么就謝天謝地. x4.業(yè)務(wù)迭代速度, 1.如果舊系統(tǒng)業(yè)務(wù)迭代速度比較快,那么可能重構(gòu)后的系統(tǒng)根本不復(fù)合業(yè)務(wù)的發(fā)展,那么就降低業(yè)務(wù)迭代速度; 2.跟可怕的是業(yè)務(wù)迭代根本不連續(xù),可能這次重構(gòu)后,業(yè)務(wù)已經(jīng)迭代到十萬八千里.所以需要控制業(yè)務(wù).
????? A30.如何解決? x1.一切處理的因素都是人,那么招來厲害優(yōu)秀的人,單兵作戰(zhàn)能力強(qiáng)大的產(chǎn)品經(jīng)理和研發(fā)人員來主導(dǎo).尤其在產(chǎn)品經(jīng)理和研發(fā)人員經(jīng)過n重天的時(shí)候;? x2.再次務(wù)必確定是否要做系統(tǒng)重構(gòu),因?yàn)橹貥?gòu)的成本確實(shí)可能無法接受; x3.最后能一次做好,那么就一次做好.如果你招來的人很差,做出來的內(nèi)容不會(huì)好,重構(gòu)的概率自然就非常大,重構(gòu)的時(shí)間和經(jīng)濟(jì)成本,業(yè)務(wù)延遲成本遠(yuǎn)遠(yuǎn)多于薪資.