OOAD 板


LINE

好久沒寫程式設計的文章了。 前幾份工作與其他的軟體工程師共事, 才發現其實大家都搞不太清楚系統架構到底在做什麼。 特別趁著手邊的案子整理了心得。 共勉之。 圖文網址 http://wp.me/p16AXN-f5 資料讀取與運作分開,從簡到繁 # 在我不同的專案,我都會面臨到同樣的問題,也就是如何將我的架構作良好的切割。 # 我們秉持著物件導向的觀念,使用繼承與封裝。 # 但組件式的觀念逐漸受到重視後,繼承似乎終將會走到深度繼承的問題。 # 深度繼承就是說當一個繼承樹必須處理過多繁雜的功能時,若非根部龐大,就是各分支 出現重複無法共用的程式碼 # 若將讀取資料裝載在類別上,ParseXML()這個函式是用來讀入XML的資料,傳入一個 XMLNode。 # 因此類別中就會include或知道XML的資料結構。 # 若有一天我們改使用JSon或其他種類的資料讀取方式,那麼這個類別就必須新增加 ParseJSon()這個功能。 # 若此功能在繼承樹的根部,那麼所有類別都必須增加此功能,若是使用純虛擬(Pure Virtual),情況就更糟糕,必須修正所有的子類別等到都完成實作之後才能上傳程式 碼(否則專案會編譯失敗)。 # 因此面對這個狀況我們通常只有幾個方案 ## 勤奮的重構 ## 想辦法阻止規格變動 ## 吸取重構的經驗,在規格還不清楚之前捨棄先用物件導向的作法,亦即是提早體認到 這種必然性。在功能與資料輸出入上分別做繼承,解構我們的繼承樹。 # 在這個例子中是這樣的架構:運作-資料-輸出入,與其將全部做一個繼承樹,不如將 運作-資料,資料-輸出入作解構。甚至將運作/資料都切割開。 ## 以此例,我們的運作FunctionClass倚賴資料,比如DataStruct(或是使用該程式語言 的基礎資料結構)。而傳入資料的方式不採用ParseXML,而統一使用 SetupDataStruct( DataStruct _src )。 如此一來運作的類別都使用統一的介面來設定。 ## 第二部分則是分析資料,例如使用 ParseXMLToDataStruct( XMLNode _node , DataStruct _src ), 然後當資料讀取完畢再設定給運作物件FunctionClass。 # 若是有一天不使用XML時,我們要修改的部份就是另外製作 ParseJSonToDataStruct( JSon _node , DataStruct _src )這個函式(群組), 然後將原本使用ParseXMLToDataStruct()的部份修改為使用ParseJSonToDataStruct()。 這時只要ParseJSonToDataStruct()的實作正確,FunctionClass就完全不需要修改, 也不需要知道外界的讀取媒介已經換掉了。 # 承上,為了要達到更好的切換,我們還必須實作 ParseToDataStruct( DataStruct _src )這個介面,讓外界完全不用知道內部使用的 媒介的,只需要在初始化的時候切換設定 ParseSystem pSys = new ParseSystem_XML,或是 ParseSystem pSys = new ParseSystem_JSon。 # ParseSystem_XML::ParseToDataStruct()導到ParseXMLToDataStruct() 這個函式。 # ParseSystem_JSon::ParseToDataStruct()導到ParseJSonToDataStruct() 這個函式。 # 因此這個系統的演進會像這樣 Type 1 http://tinyurl.com/adhcgbs God使用FunctionClassBase1::ParseXML() FunctionClassBase1知道XML Type 2 http://tinyurl.com/aql66w6 God必須改使用FunctionClassBase2::ParseJSon() FunctionClassBase2知道XML而且還知道JSon Type 3 http://tinyurl.com/aow4snz God必須切換使用ParseXMLToData()到ParseJSonToData() FunctionClassBase3不用改變,也不需要知道現在用的是XML或JSon。 Type 4 http://tinyurl.com/bh7ynd3 God只需要修改初始化的地方改使用不同的ParseSystem,執行時不需要知道現在用的是 XML或JSon。 -- "May the Balance be with U"(願平衡與你同在) 視窗介面遊戲設計教學,討論,分享。歡迎來信。 視窗程式設計(Windows CLR Form)遊戲架構設計(Game Application Framework) 遊戲工具設計(Game App. Tool Design ) 電腦圖學架構及研究(Computer Graphics) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.164.70.150 ※ 編輯: NDark 來自: 1.164.70.150 (02/06 22:46) NDark:轉錄至看板 Programming 02/06 22:51
1F:推 jijuan :推 05/14 22:58
2F:推 aiueoH :推推 感謝 08/10 00:26







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP