亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用設計模式改善程序結構(三)

2019-11-18 13:44:05
字體:
來源:轉載
供稿:網友

設計模式在某種程度上確實能夠改善我們的程序結構,使設計具有更好的彈性。也正是由于這個原因,會導致我們可能過度的使用它。程序結構具有過度的、不必要的靈活性和程序結構沒有靈活性一樣都是有害的。本文將分析過度的靈活性可能造成的危害,并且結合一些實例來闡述使用設計模式改善程序結構應遵循的原則。

1、介紹

本系列文章的前兩篇主要講述了如何使用設計模式來改善我們的程序結構,大家可以看到經過調整的代碼具有了更大的彈性,更輕易適應變化。讀者朋友可能也具有類似的經驗,通過使用設計模式使得自己的軟件系統更加具有可擴展性和健壯性。但是,這樣就可能會造成一個結果:無論碰到任何問題,我們首先做的就是設法找到一個解決它的設計模式來,而不是解決問題的最簡潔的方法。

上面所述的就是過分使用設計模式的情況,它賦予了代碼過度的靈活性。大家往往對于僵化、拙劣的設計所導致的危害非常清楚,但是對于過度靈活的設計可能帶來的危害卻不是很重視。本文試圖從這個角度來談談使用設計模式改善程序結構應遵循的原則,使大家避免陷入過分使用設計模式的狀況。其中的一個要害議題就是:我們為什么要使用設計模式,到底什么樣的程序結構才是好的。

2、過分設計的危害

正是由于大家對于僵化的設計所造成的結果的懼怕,以及對于設計模式給我們的程序結構帶來的無比的彈性的贊嘆,才會導致過分的預先設計(up-front design)。原因很簡單:需求肯定是要變化的。所以,我們就需要給代碼一些更多的靈活性,使得它可以適應以后的變化。于是,我們在最開始的設計中,就針對需求的變化做了很多的假設,并把對于這些假設的支持放在代碼中。

假如對這些假設的猜測是正確的,那么做的這一切都是值得的。不幸的是,對這些假設的猜測很難是正確的。原因很簡單:需求是我們的客戶(一般是另外一個企業)提出的,但是作為一個現代的企業,要想生存,就要不斷的改變自己以適應日新月異的變化,所以客戶的需求肯定是要根據自身生存、發展的需要而不斷變化的,并且這些變化都是很難猜測的,經常是客戶自己都不知道下一步該如何變化(假如都能夠被你猜測到的話,這個公司肯定會高薪聘請你去做他們的CEO)。

假如猜測是錯誤的話,第一個直接后果就是,浪費了寶貴的時間、資金。我們花了很多的時間在一些根本沒有任何用處的靈活性上,而這些時間本可以用來為系統增加新的功能或者修正錯誤。

過分靈活的代碼往往更加復雜、難以理解。其他的開發人員不得不花費很多的時間來理解這些本來可以去除的復雜性。必然導致代碼的維護、擴展困難(假如需求的變化和你的假設不同),項目的開發效率降低。

例如:發現一種計算有多個不同的方式, 不加思考就直接采用Strategy設計模式,而不是采用簡單、清楚的條件表達式的方法(if-else語句),那么就會導致結構的復雜(要增加好幾個類)。假如后來發現根本就沒有在增加新的計算方法方面的需求,或者更糟糕的是需求的變化是某幾個計算策略間要增加依靠關系,那么修改起來就會十分困難。系統中假如存在太多的這種沒有必要的靈活性,很可能最終的程序結構就會陷入冗余、混亂之中。

程序結構的靈活性是有代價的,這種代價往往是更多的復雜性或者造成系統不輕易理解,需要我們在設計時進行權衡。

3、軟件開發的節奏

現在在軟件工程領域很活躍的一個組織是:靈敏社團,他們提出了一系列的靈敏方法(XP就是其中很聞名的一種)。在靈敏方法中制定了一系列的策略、實踐來擁抱需求的變化。其目標是:使軟件以規范的節奏進展,最終保質、按時交付軟件產品?,F在已有很多使用這種方法成功的商業案例。

對于軟件開發的節奏可以描述如下:首先寫測試代碼,提出對于系統的功能需求,然后寫工作代碼滿足這個需求,重復這個過程直到實現系統的所有需求。在這個過程中間要頻繁的(一般是在增加新功能或者修正錯誤時)進行重構,去除冗余的、含糊的代碼,改善程序的結構,使得新功能的添加變得輕易??梢钥闯鲈谶@樣的軟件開發節奏中,沒有對需求的變化做什么猜測(進行猜測的主要原因是懼怕變化),而是以一種主動的姿態來擁抱變化,當目前的設計不能夠適應發生的變化時,大膽的進行重構(因為有頻繁測試保證,所以重構的風險是不大的)去適應新的變化。這種方式被稱為演化設計(evolutionary design),在參考文獻〔3〕中可以得到進一步的內容。

設計模式一般會成為重構的目標,但是為什么要這樣做?我們一定要重構到一個設計模式嗎?怎樣的程序結構才是好的呢?

4、要害是要展現設計意圖

現在有一個普遍的誤解就是:程序結構的靈活性越高越好,所以對程序結構改善的目標就是使它具有更高的彈性,這樣在未來需求發生變化時可以很輕易的改變程序來適應這種變化。其實,結構的靈活性和結構的易更改性之間是有矛盾的。很明顯,結構越靈活相應的就會越復雜,越復雜就越不輕易理解,不輕易理解怎么會輕易更改呢?參考文獻〔1〕中專門探討了這個問題,有愛好可以看看。

正是這個誤解的存在,使得很多開發者看到了設計模式所帶給程序結構的靈活性,從而在進行代碼重構時就把結構的靈活性作為一個最重要的目標。最終導致了程序結構的過分靈活性,損傷了軟件的質量。

但是,設計模式確實能夠改善我們的程序結構,面向對象大師Martin Fowler的經典著作《Refactoring ImPRoving the Design of Existing Code》一書中就有很多的使用設計模式進行重構的例子。難道僅僅是因為設計模式能夠帶來足夠的靈活性嗎?顯然不是!主要是因為這些設計模式更能夠展示設計者的設計意圖,更加便于理解!

很多面向對象專家和模式研究專家對重構的動機進行了研究,發現對于一個好的重構過程來說,重構的結果到底是不是一個設計模式是不重要的。它們的最終動機都是:減少或者消除冗余代碼,簡化設計最終達到展示真正的設計意圖,更加便于交流。

Martin Fowler的《Refactoring》一書的第一章有一個關于影碟出租的例子,具體的展示了重構的過程以及每一步的動機,很好的說明了上面的問題。

5、再談設計模式的動機

本系列文章的第一篇中談論設計模式本身的意圖、動機的重要性。這里我想再結合上面的內容重新熟悉一下這個問題?,F在我們有兩個動機存在,設計模式本身的動機以及我們要重構來改善我們的程序結構的動機(可能是要重構到一個設計模式)。這兩個動機其實是沒有很大的關系的。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线播放视频| 亚洲成人a**站| 懂色av一区二区三区| 国产精品日韩在线| 欧美性xxxxxx| 91精品国产高清自在线| 久久综合九色九九| 日韩中文字幕在线视频播放| 久久99国产精品自在自在app| 久久久久久网站| 久热爱精品视频线路一| 久久99亚洲热视| 欧美一级视频一区二区| 亚洲精品视频播放| 激情成人中文字幕| 亚洲精品国产品国语在线| 91美女福利视频高清| 国外成人免费在线播放| 欧美成人精品h版在线观看| 亚洲国产天堂久久国产91| 亚洲成**性毛茸茸| 国产欧美最新羞羞视频在线观看| 69av视频在线播放| 日韩精品免费看| 91在线中文字幕| 欧美日韩综合视频网址| 久久青草福利网站| 日韩美女视频在线观看| 中文字幕亚洲第一| 2018国产精品视频| 懂色aⅴ精品一区二区三区蜜月| 亚洲激情中文字幕| 国产精品午夜视频| 亚洲男人天堂手机在线| 欧美高清第一页| 欧美诱惑福利视频| 国产精品免费久久久| 日本一区二区三区四区视频| 中文字幕日韩欧美在线视频| 亚洲japanese制服美女| 一区国产精品视频| 97视频在线观看网址| 免费91在线视频| 久久久噜噜噜久久| 日韩国产欧美区| 欧美极品少妇xxxxⅹ免费视频| 亚洲国产天堂久久国产91| 亚洲999一在线观看www| 久久影院免费观看| 欧洲亚洲免费视频| 欧美成人精品不卡视频在线观看| 欧美国产乱视频| 欧美中文字幕视频在线观看| 国产精品吹潮在线观看| 色妞欧美日韩在线| 精品国产一区二区三区四区在线观看| 色偷偷偷亚洲综合网另类| 国产欧美日韩亚洲精品| 国模吧一区二区三区| 精品亚洲一区二区三区在线播放| 青青草一区二区| 国内精品久久久| 欧美电影免费观看高清| 日韩有码在线电影| 欧美午夜女人视频在线| 中文字幕无线精品亚洲乱码一区| 高清一区二区三区四区五区| 亚洲一区二区三区在线视频| 亚洲午夜未满十八勿入免费观看全集| 九色成人免费视频| 国产一区二区欧美日韩| 深夜福利亚洲导航| 亚洲精品久久久久久下一站| 91欧美激情另类亚洲| 国产美女久久久| 欧美性高跟鞋xxxxhd| 精品亚洲一区二区三区在线观看| 国产精品白丝jk喷水视频一区| 日韩在线欧美在线| 在线播放日韩欧美| 亚洲成人a级网| 国产精品pans私拍| 日本免费一区二区三区视频观看| 亚洲第一页在线| 亚洲精品国产suv| 国产精品青草久久久久福利99| 亚洲成年网站在线观看| 中文字幕欧美精品在线| 国产精品电影在线观看| 国产欧美精品日韩| 国产精品久久久久久久久久久不卡| 日韩欧美大尺度| 亚洲人成网站999久久久综合| 欧美裸体视频网站| 久久综合五月天| 国产精品一区二区女厕厕| 欧美成在线视频| 日韩中文字幕亚洲| 欧美久久精品午夜青青大伊人| 欧美成人黄色小视频| 欧美国产日韩一区二区在线观看| 狠狠色狠色综合曰曰| 精品国产精品三级精品av网址| 国产噜噜噜噜噜久久久久久久久| 久久亚洲私人国产精品va| 亚洲成人黄色在线| 伊人精品在线观看| 欧美在线免费看| 欧美日本中文字幕| 日韩在线播放av| 精品亚洲男同gayvideo网站| 亚洲乱码一区av黑人高潮| 久久久国产在线视频| 国产日韩中文字幕在线| 久久久久久97| 日韩一区av在线| 日韩久久精品电影| 欧美午夜丰满在线18影院| 亚洲天堂色网站| 欧美性xxxxxx| 久久全国免费视频| 精品国产福利在线| 精品亚洲国产视频| 欧美怡春院一区二区三区| 97**国产露脸精品国产| 国产综合在线观看视频| 久久夜色精品国产| 精品亚洲一区二区三区在线观看| 欧美国产日韩xxxxx| 理论片在线不卡免费观看| 国产精品91视频| 亚洲综合精品一区二区| 日韩视频免费在线| 国产欧美日韩精品在线观看| 亚洲成人精品在线| 2019中文字幕免费视频| 97视频在线观看网址| 国产欧美一区二区| 久久久久久久97| 日韩欧美精品免费在线| 国产精品最新在线观看| 国产精品综合不卡av| 中文字幕视频一区二区在线有码| 欧美自拍视频在线观看| 国产自摸综合网| 久久亚洲私人国产精品va| 国产精品你懂得| 欧美猛少妇色xxxxx| 欧美专区日韩视频| 亚洲色图欧美制服丝袜另类第一页| 日韩一区视频在线| 国产97在线视频| 亚洲人成网7777777国产| 国产精品视频精品视频| 日韩av一区在线| 欧美成年人在线观看| 97免费在线视频| 欧美亚洲视频在线观看| 亚洲国产成人精品女人久久久| 国产亚洲一区二区在线| 成人做爽爽免费视频| 欧美国产日韩中文字幕在线| 97久久精品人搡人人玩| 亚洲国产欧美一区二区丝袜黑人|