Re: [資料] 神之物件 (God object, Blob AntiPattern)
※ 引述《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
討論串 (同標題文章)
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章