首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 繽紛校園 英語學(xué)習(xí)
2010考研 | 自學(xué)考試 | 成人高考 | 專 升 本 | 法律碩士 | MBA/MPA | 中 科 院
四六級(jí) | 商務(wù)英語 | 公共英語 | 職稱日語 | 職稱英語 | 博思 | 口譯筆譯 | GRE GMAT | 日語 | 托福
雅思 | 專四專八 | 新概念 | 自考英語 | 零起點(diǎn)英、、、、韓語 | 在職申碩英語
在職攻碩英語 | 成人英語三級(jí)
等級(jí)考試 | 水平考試 | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 報(bào)檢員 | 外銷員 | 司法考試 | 導(dǎo)游考試 | 教師資格 | 國際商務(wù)師 | 跟單員
單證員 | 物流師 | 價(jià)格鑒證師 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 人力資源管理師 | 管理咨詢師
期貨從業(yè)資格 | 社會(huì)工作者
會(huì)計(jì)職稱 | 注會(huì)CPA | 經(jīng)濟(jì)師 | 統(tǒng)計(jì)師 | 注冊(cè)稅務(wù)師 | 評(píng)估師 | 精算師 | 高會(huì) | ACCA | 審計(jì)師
法律顧問 | 會(huì)計(jì)證
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)師 | 監(jiān)理師 | 安全師 | 咨詢師 | 結(jié)構(gòu)師 | 建筑師 | 安全評(píng)價(jià)師
房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 設(shè)備監(jiān)理師 | 巖土工程師 | 質(zhì)量資格 | 房地產(chǎn)經(jīng)紀(jì)人 | 造價(jià)員
投資項(xiàng)目管理 | 土地代理人 | 環(huán)保師 | 環(huán)境影響評(píng)價(jià) | 物業(yè)管理師 | 城市規(guī)劃師 | 公路監(jiān)理師
公路造價(jià)工程師 | 招標(biāo)師
執(zhí)業(yè)護(hù)士 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 衛(wèi)生資格
您現(xiàn)在的位置: 考試吧(Exam8.com) > 軟件水平考試 > 系統(tǒng)分析師 > 正文

封裝的變化之封裝對(duì)象創(chuàng)建的變化

考慮一個(gè)日志記錄工具。目前需要提供一個(gè)方便的日志API,使得客戶可以輕松地完成日志的記錄。該日志要求被記錄到指定的文件中,記錄的內(nèi)容屬于字符串類型,其值由客戶提供。我們可以非常容易地定義一個(gè)日志對(duì)象:
 
public class Log
{
 public void Write(string target, string log)
 {
  //實(shí)現(xiàn)內(nèi)容;
 }
}

  當(dāng)客戶需要調(diào)用日志的功能時(shí),可以創(chuàng)建日志對(duì)象,完成日志的記錄:
 
Log log = new Log();
log.Write(“error.log”, “l(fā)og”);

  然而隨著日志記錄的頻繁使用,有關(guān)日志的文件越來越多,日志的查詢與也變得越不方便。此時(shí),客戶提出,需要改變?nèi)罩镜挠涗浄绞,將日志?nèi)容寫入到指定的數(shù)據(jù)表中。顯然,如果仍然按照前面的設(shè)計(jì),具有較大的局限性。 現(xiàn)在我們回到設(shè)計(jì)之初,想象一下對(duì)于日志API的設(shè)計(jì),需要考慮到這樣的變化嗎?這里存在兩種設(shè)計(jì)理念,即漸進(jìn)的設(shè)計(jì)和計(jì)劃的設(shè)計(jì)。從本例來分析,要求設(shè)計(jì)者在設(shè)計(jì)初就考慮到日志記錄方式在未來的可能變化,并不容易。再者,如果在最開始就考慮全面的設(shè)計(jì),會(huì)產(chǎn)生設(shè)計(jì)上的冗余。因此,采用計(jì)劃的設(shè)計(jì)固然具有一定的前瞻性,但一方面對(duì)設(shè)計(jì)者的要求過高,同時(shí)也會(huì)產(chǎn)生一些缺陷。那么,采用漸進(jìn)的設(shè)計(jì)時(shí),遇到需求變化時(shí),利用重構(gòu)的方法,改進(jìn)現(xiàn)有的設(shè)計(jì),又需要考慮未來的再一次變化嗎?這是一個(gè)見仁見智的問題。對(duì)于本例而言,我們完全可以直接修改Write()方法,接受一個(gè)類型判斷的參數(shù),從而解決此問題。但這樣的設(shè)計(jì),自然要擔(dān)負(fù)因?yàn)槲磥砜赡艿脑僖淮巫兓,而?dǎo)致代碼大量修改的危險(xiǎn),例如,我們要求日志記錄到指定的Xml文件中。

  所以,變化是完全可能的。在時(shí)間和技術(shù)能力允許的情況下,我更傾向于將變化對(duì)設(shè)計(jì)帶來的影響降低到最低。此時(shí),我們需要封裝變化。

  在封裝變化之前,我們需要弄清楚究竟是什么發(fā)生了變化?從需求看,是日志記錄的方式發(fā)生了變化。從這個(gè)概念分析,可能會(huì)導(dǎo)致兩種不同的結(jié)果。一種情形是,我們將日志記錄的方式視為一種行為,確切的說,是用戶的一種請(qǐng)求。另一種情形則從對(duì)象的角度來分析,我們將各種方式的日志看作不同的對(duì)象,它們調(diào)用接口相同的行為,區(qū)別僅在于創(chuàng)建的是不同的對(duì)象。前者需要我們封裝“用戶請(qǐng)求的變化”,而后者需要我們封裝“日志對(duì)象創(chuàng)建的變化”。

  封裝“用戶請(qǐng)求的變化”,在這里就是封裝日志記錄可能的變化。也就是說,我們需要把日志記錄行為抽象為一個(gè)單獨(dú)的接口,然后才分別定義不同的實(shí)現(xiàn)。如圖一所示:

 


圖一:封裝日志記錄行為的變化

轉(zhuǎn)帖于:軟件水平考試_考試吧
文章搜索
封裝的變化之封裝對(duì)象創(chuàng)建的變化網(wǎng)友評(píng)論網(wǎng)友評(píng)論
版權(quán)聲明 --------------------------------------------------------------------------------------
    如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請(qǐng)注明出處。
 gaoxiaoliang