作者godfat (godfat 真常)
看板OOAD
标题Re: [资料] 神之物件 (God object, Blob AntiPattern)
时间Mon Aug 6 13:38:25 2007
※ 引述《H45 (!H45)》之铭言:
: [举例恕删....老实说不太懂你要表达的意思....]
只是想表达自己喜欢这种用法而已 :3
: 话说回来,身为一个 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();
这样多起来是会打到很烦的。当然,以上是假设上下两段在不同地方,
无法使用回圈呼叫。当然,仍然可以向其他容器注册,再同时拨放﹍
但这又更麻烦了,也造成太多不必要的复杂度。
这种时候就乾脆让 sound init 时就顺便拨放。
这是假设是在写 app 的情况下,如果是 lib 或 framework,
因为不能假设 client 的 domain 需要什麽,就不能任意将职责混合。
如果 client 有需要用混合的职责(可能这个 domain 只会有这种职责),
再自己写 wrapper 把上述两个职责合并即可。
如果未来有需要勒?再改回去啊 XD
XP 不是这样做吗? :p 不要做多余的假设。
--
生死去来、棚头傀儡、一线断时、落落磊磊
《花镜》-世阿弥
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.218.90.242
1F:推 H45:Why not new Sound("ouch.tta").start() ? 08/06 14:31
2F:推 godfat:not much different. and you have to make start return 08/06 15:29
3F:→ godfat:sound or you can't var sound = ... 08/06 15:30