最近被客戶(hù)的要求折磨快受不了了,包括不斷的需求變革,性能上的要求,易用性上的要求都很多,還有修改代碼片斷凌亂、可讀性差的情況下來(lái)修改代碼的痛苦,慢慢的開(kāi)始思考,怎么樣才能快速的滿(mǎn)足客戶(hù)的區,而做的代碼的修改最??? 怎么提高系統的可擴展性?怎么才能提高代碼的可維護性?怎么樣提高系統的性能?怎么樣提高系統的健壯性可以使系統運行穩定一些? 呵呵,這些東西我想也是現在很多軟件科學(xué)家在研究的東西,可能比較大,不過(guò)我覺(jué)得適合自己的實(shí)用就好。
最近在在大力的研究這些方面,包括看了很多相關(guān)的書(shū)籍,有了點(diǎn)微薄的感悟和如果做好軟件需要那些系統知識的方向。然后一點(diǎn)點(diǎn)點(diǎn)的實(shí)施,這里暫不討論項目管理方面,一個(gè)軟件的成功與一個(gè)好的項目管理方法分不開(kāi)的,采用比較清晰的分層實(shí)現方式我想對于解決上面的問(wèn)題是必備的,這里先討論一層一層的討論。在設計方面開(kāi)始采用UML的系統分析設計方式,開(kāi)發(fā)領(lǐng)域模型,快速的對系統的邊界做一個(gè)規劃,然后根據領(lǐng)域模型分析出類(lèi)模型,形成一個(gè)類(lèi)與類(lèi)之間的關(guān)系網(wǎng),這里說(shuō)的網(wǎng)也就是領(lǐng)域方面的類(lèi)庫,她不涉及系統是用.net開(kāi)發(fā)的還是JAVA開(kāi)發(fā)的,也不涉及是開(kāi)發(fā)的BS系統還是CS系統,這些領(lǐng)域類(lèi)庫是對這些都適用了,只有這個(gè)設計強大的領(lǐng)域類(lèi)庫才能保證后面的系統的可擴展性,健壯性,可維護性的成功建立,這個(gè)應該是基礎??戳艘幌履壳皩?xiě)得程序,大都是用戶(hù)事件驅動(dòng)每個(gè)事件一個(gè)功能,然后把代碼寫(xiě)在一起,雖然有了點(diǎn)分層的做法,但是功能之間的領(lǐng)域類(lèi)都是孤立的,存在大量的代碼重復,而且耦合度非常高,代碼鏈震很?chē)乐?,所以這也照成了,可能僅僅一點(diǎn)點(diǎn)的用戶(hù)需求變化,導致大量的修改,還牽扯出其他與之代碼關(guān)聯(lián)的功能錯誤,也給測試帶來(lái)了難度。不過(guò)這樣做的唯一一點(diǎn)好處可能就是開(kāi)發(fā)速度比較快吧,對于新手比較容易入門(mén),大家都比較熟悉這種模式,特別是在項目組內部,每個(gè)人完成自己的任務(wù)也不知道,自?huà)呙媲把?,沒(méi)有在一個(gè)更高一點(diǎn)的層次來(lái)關(guān)注和其他人員在代碼級的協(xié)作。這也許就是敏捷開(kāi)發(fā)要解決的問(wèn)題之一。
在抽象出來(lái)這些領(lǐng)域類(lèi)之后,接下去就是要細化這個(gè)網(wǎng)了(這個(gè)步驟要考慮一些技術(shù)實(shí)現方法了,必然有些語(yǔ)言不支持多繼承等),這個(gè)階段設計模式是必備的,通過(guò)各種模式的應用修改成自己需要的模式來(lái)適應這個(gè)網(wǎng),實(shí)現系統層次之間實(shí)現松散耦合,面向接口的編成又成為必然,這可能就是面向接口編成解決的問(wèn)題之一,考慮系統地可擴展性在這里應該是占有比較很重要的一塊。
當這個(gè)對象網(wǎng)編織完以后,也就是領(lǐng)域層設計做完了,那么對于用例的實(shí)現這塊來(lái)說(shuō)也就只考慮業(yè)務(wù)流程實(shí)現就可以了吧,這一層其實(shí)也不用涉及到界面的一些東東,就根據用例把業(yè)務(wù)流程通過(guò)建立的領(lǐng)域對象網(wǎng)走通就ok,這就是架構中的業(yè)務(wù)邏輯層做的事。
領(lǐng)域業(yè)務(wù)流程,和相應的支持對象建立完以后,這就要涉及很細的技術(shù)了,對于web開(kāi)發(fā),界面傳的參數,重定向,使用哪個(gè)業(yè)務(wù)流程等,用這個(gè)層來(lái)做,也就是控制層。
最后根據系統界面的設計實(shí)現界面的展示工作,具體展示成什么樣,要用到那些東西,讓他直接和控制層交互就完了。不過(guò)對于一些簡(jiǎn)單的控制邏輯,可能直接采用調用業(yè)務(wù)流程中的方法的時(shí)候,我是不用這個(gè)方法,多加一層麻煩一些也把他分清楚些好。
對于上面說(shuō)的,首先設計分層,然后每層保存相對的獨立,系統的可維護性和需求變更使代碼的修改和鏈震最小化在采用清晰的分層設計會(huì )有很大的提高。然后設計領(lǐng)域對象關(guān)系網(wǎng),然后細化重構對象關(guān)系網(wǎng),然后設計業(yè)務(wù)流程,然后設計界面和控制器層。這里沒(méi)有說(shuō)數據訪(fǎng)問(wèn)層,因為這個(gè)層對于面向對象系統設計來(lái)說(shuō)應該是透明的,是比較孤立的,數據訪(fǎng)問(wèn)層比較復雜,簡(jiǎn)單的處理就是建立實(shí)體類(lèi)和實(shí)體控制類(lèi),復雜的就是采用O/R maping工具實(shí)現,這個(gè)要根據具體的開(kāi)發(fā)工具和開(kāi)發(fā)模式的熟悉程度來(lái)定,.net的開(kāi)發(fā)工具對于數據集的處理比較好,我們現在用的就是包裝了數據庫訪(fǎng)問(wèn)的實(shí)體類(lèi)和實(shí)體控制類(lèi)來(lái)實(shí)現這個(gè)層,JAVA的架構O/R的比較多,現在.net 中也可以不用數據集采用O/R maping工具來(lái)實(shí)現,這個(gè)速度比較慢,但是可以跟內存中的對象和關(guān)系數據庫很好的分離。
了解了上面的東西,感覺(jué)自己需要學(xué)習的東西還比較多,如果做需求,用例的編寫(xiě)需要學(xué)習,設計上界面的設計、領(lǐng)域高層抽象模型的設計、數據庫設計等還需要學(xué)習,以前都是基于word的設計所以要實(shí)現面向對象的設計還要學(xué)習,技術(shù)上的實(shí)現對象關(guān)系圖的設計需要學(xué)習等等,:) 要學(xué)的東西太多了,大家一起努力吧。呵呵
這些都是我個(gè)人對軟件開(kāi)發(fā)的一點(diǎn)認識,如果有不合適的地方,歡迎指正。:)
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。