作者cplusplus (大口小口吃炒饭)
看板OOAD
标题Re: [资料] 神之物件 (God object, Blob AntiPattern)
时间Fri Sep 7 16:42:27 2007
个人看法是...视情况而定
在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