OOAD 板


LINE

※ 引述《hsnucsc (hsnugo)》之銘言: : 我也有找到另一個方法, 是增加interface : http://www.codingefficiency.com/2009/07/18/ : solid-s-single-responsibility-principle/ : http://0rz.tw/QP6hs (縮過的網址) : 不過仍然讓人很難分辨responsibility : 說嚴格一點, 好像每個method, 都有理由改變 : 但是又不可能把每個method都新增一個物件去處理這項功能 : 希望有人可以幫忙解答 : 謝謝 我發現我沒有回答到你問的問題 Orz (結果我打那麼長的廢話 -.-) 你說的沒錯 「好像每個method, 都有理由改變」 但是是否有需要將所有的屬性或方法全部分開封裝? 這個問題就要看你是做什麼樣的專案了! 有些專案 某些類別幾乎是不會變化 那麼你將它封裝的很細就只是白花功夫 但是有些類別很容易被要求改變 那你去使用design pattern就會有效果... 這完全視你的專案目的而定 所以才會在專案一開始 就先做OOA&D 你才會知道這個專案 哪些部分很容易發生改變 而需要使用pattern 這個responsibility完全是看專案需求而定 不過 即使在一個專案下 有一些物件是完全不需要使用pattern來重新封裝(因為很少改變) 但是如果你有「先見之明」 覺得這些物件很可能會在將來其他專案被reuse 那麼先套上pattern可以有利於將來的再使用 甚至是專案和專案之間的整合 另外「針對介面寫程式」 這句話 就是告訴你SRP的思維 事實上 「真正要履行SRP的就是介面」 專案一開始 真正要規劃的 並不是要規劃產生多少個類別 而是要規劃需要多少個介面(或是抽象類別,以下所說的介面都包含抽象類別) 每個介面都是被規劃來處理某些事情 而這些介面必須遵守SRP原則 當一個介面在這個專案下會因為兩個截然不同的理由而需要修改時 就必須考慮將介面拆開 並藉由reference來couple到抽離出來的介面 (介面的coupling等於實體類別的鬆耦合 因為是綁介面而不是綁特定的類別) 最後才去實作你的實體類別 若是一個介面之下 只會有一個類別去實踐這個介面(也就是變更需求不大) 通常我們就不會花功夫去做介面 直接在該實體類別去實踐這個介面就好 而其實剛剛說的一整個過程 就是依賴倒轉原則 Dependency Inversion Principle(DIP) 什麼「細節應該依賴抽象,抽象不應該依賴細節」 這句話聽聽就好 因為用這種文言文講給初學者聽 根本一點效果都沒有 講白一點 先將「專案的需求」轉成「介面或抽象類別」 而每個「介面或抽象類別」都必須只為一種「專案需求的變化」才會改變 這個「介面或抽象類別」所承擔的就是單一個變化的responsibility (SRP) 把這些「介面或抽象類別」依循固定規則方式來耦合起來 就是使用design pattern 最後才去實踐這些「介面或抽象類別」變成實體類別 就是依賴倒轉原則 而要怎麼知道一個「專案」會有多少「專案的需求」 就是靠OO analysis (靠經驗可以) 回到一開始你問的「好像每個method, 都有理由改變」 就端看你的OOA做出來的結果是如何啦~ --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.77.52.127 ※ 編輯: leondemon 來自: 203.77.52.127 (02/26 00:50)
1F:推 hsnucsc :感覺"介面", 可以說是一個requirement, 02/27 14:10
2F:→ hsnucsc :responsibility, 所以將會改變的部份封裝到一個 02/27 14:11
3F:→ hsnucsc :介面, 並利用多型, 讓我們可以只針對介面撰碼 02/27 14:12
4F:→ hsnucsc :形成一種彈性, 這樣說對嗎? 02/27 14:12
5F:→ hsnucsc :你的文章真的滿清楚的, 謝謝 02/27 14:13







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燈, 水草

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

TOP