作者PsMonkey (痞子军团团长)
看板OOAD
标题Re: [资料] 神之物件 (God object, Blob AntiPattern)
时间Mon Aug 6 19:26:34 2007
※ 引述《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