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

看板OOAD作者 (大口小口吃炒飯)時間16年前 (2007/09/07 16:42), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串9/19 (看更多)
個人看法是...視情況而定 在constructor/destructor裡面做些事情也是蠻常見的事情... 甚至主要功能在裡面完成也是蠻常見的事情.. 例如做同步化的時候...常用到簡易的lock之類的東西.. class Lock; void Function() // syn safe { Lock safe("LockName"); //constructor裡面幫你做同步化,加上封鎖 ... ... ... return; // 在任何一點用任何方式離開都會呼叫destructor,解除封鎖 } 這樣不會卡死,也不容易讓使用者誤用 當然你要把程式寫成 Lock safe("LockName"); safe.lock(); ... safe.unlock(); 也是可以,只是程式風格的問題... 提供lock, unlock等功能也挺不錯,但這樣也提高了誤用的可能性, 且在上面的例子,每個離開點地方你也得加上 unlock,你也可以說在constructor裡加上 檢查做unlock,但這樣就失去lock/unlock對秤性了,你在constructor裡面不自動lock 在destructor卻自動unlock,這種設計也有人詬病... 所以如果我只是要一個很簡單的自動lock功能,上面的做法我覺得挺好的, 也是在constructor/destructor裡完成所有動作。 我看本來的討論是說把"整個程式"寫在constructor, 當然,把"整個程式"寫在constructor當然就是件很糟糕的事情... 但是如果只是一些小功能的話,視情況我覺得並不一定要這麼排斥 所以我覺得不一定說 constructor 只能做物件屬性的初始化 OO 不是要讓程式變得麻煩,是要變得簡單好管理又好懂 class Sound; void Welcome() { Sound s("welcome.mp3"); // play welcome background music repeatly ..... // leave the function, autoamtically call constructor to stop play. } 這樣也不會難懂吧,應該也不至於破壞整個架構吧 --- 以上只是個人的想法,可以討論,但不要戰我啊 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.50.10
文章代碼(AID): #16uGxqA_ (OOAD)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 9 之 19 篇):
文章代碼(AID): #16uGxqA_ (OOAD)