Re: [資料] 神之物件 (God object, Blob AntiPattern)
個人看法是...視情況而定
在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
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 9 之 19 篇):
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章
-4
30