Re: [資料] 神之物件 (God object, Blob AntiPattern)

看板OOAD作者 (痞子軍團團長)時間17年前 (2007/08/06 19:26), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/19 (看更多)
※ 引述《godfat (godfat 真常)》之銘言: : ※ 引述《H45 (!H45)》之銘言: : : 話說回來,身為一個 constructor 應該做「什麼」事情? : : 雖然沒有一定的原則,但是我總覺得 constructor 應該只負責「建立一個物件的屬性」 : : 而不應該負責「進行一個物件的行為」 : : 不是嗎? : 我覺得這要看狀況,例如音效,是直接讀取時就撥放好呢,還是分開? : var sound = new Sound("ouch.tta"); // 順便推廣 The True Audio XD : sound.start(); : 這個作法很合理且直覺,但是如果在你的程式裡,只有讀取時需要撥放, : 而會使用音效的地方又非常地多: : var sound_oops = new Sound("oops.tta"); : sound_oops.start(); : var sound_orz = new Sound("orz.tta"); : sound_orz.start(); : 這樣多起來是會打到很煩的。當然,以上是假設上下兩段在不同地方, 你不能用「programmer 會打字打到煩」當作理由 反過來說,這個理由(pr 爽最重要)發展到極致 就會產生神之物件 那,幹麼還要用 OO.... Orz : 無法使用迴圈呼叫。當然,仍然可以向其他容器註冊,再同時撥放﹍ : 但這又更麻煩了,也造成太多不必要的複雜度。 : 這種時候就乾脆讓 sound init 時就順便撥放。 : 這是假設是在寫 app 的情況下,如果是 lib 或 framework, 對於你的 app,你的 Sound 就是一個小小 lib : 因為不能假設 client 的 domain 需要什麼,就不能任意將職責混合。 : 如果 client 有需要用混合的職責(可能這個 domain 只會有這種職責), : 再自己寫 wrapper 把上述兩個職責合併即可。 : 如果未來有需要勒?再改回去啊 XD : XP 不是這樣做嗎? :p 不要做多餘的假設。 你已經知道這兩個動作是沒有相關、或是沒有強制性的前後關係 那這不是假設,這是已知 你現在是假裝忽略這個已知,這不是假設 [指] 如果現在就順手弄好,雖然 coding 的時候會多打幾個字 但是你知道你永遠不會回頭把這兩個東西拆開來 那個利多? 回頭改程式碼,這有很多先決條件 包括文件的齊全度、coding style 的統一性(至少變數名稱...) 更不用說那種不大不小的功能 很多人會嫌麻煩,乾脆重新寫一個新的... 造成一堆作相同事情的物件(ㄜ... 最後這個好像離題了) ==== 當然,也可能只是你例子舉爛了... [茶] ==== XP 我不熟(我還在用 2000 [毆飛]) 歡迎 XP 高手指點 -- 侃侃長論鮮窒礙 首頁:http://www.psmonkey.idv.tw 眾目睽睽無心顫 Blog:http://ps-think.blogspot.com 煢居少聊常人事 殺頭容易告白難 歡迎參觀 Java 版(@ptt.cc)精華區 \囧/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.193.251
文章代碼(AID): #16jmLjh0 (OOAD)
討論串 (同標題文章)
文章代碼(AID): #16jmLjh0 (OOAD)