PHP China | 中国开源之路 's Archiver

Sunyanzi 发表于 2008-9-25 08:13

“可扩展,高内聚,低耦合”真的是好程序么 ...

可扩展这里没什么可说的 ...

效率等同的情况下越容易扩展的程序越可以叫做好程序 ...

说起来就太多了 ... 不讨论这个 ...

关于内聚和耦合 ... 我们真的有这个必要把所有东西都搓堆儿么 ...?

我是学中文的 ... 对物理的东西不太懂 ...

所以就一直跟着前人的路走 ... 拼命把程序“高内聚,低耦合” ...

但是这条路是越走越不是滋味 ...

比如数据库连接类 ... 和主要逻辑流程就没啥关系 ... 为啥要把它也内聚进来 ..?

用程序说话 ... 下面这种方式是我一直在用的 ...

[php]class basement {
protected function __construct() {}
protected function __destruct() {}
}
class database extends basement {
protected function query() {}
}
class module extends database {
public funtion event() {
  $this->query();
}
}[/php]

然则 query 这个动作真是怎么看怎么觉得不搭界 ...

module 里面其他的动作都是和当前业务有关的 ...

query 是直接操作数据源 ... 写 $this->query 总觉得别扭 ...

于是想到了被自己放弃多年的另外一个方法 ...

[php]class basement {
protected $database;
protected function __construct() {
  $this->database = new database;
}
protected function __destruct() {}
}
class database {
protected function query() {}
}
class module extends basement {
public funtion event() {
  $this->database->query();
}
}[/php]

感觉舒服了很多 ...

尘归尘土归土 ... database 就是 database template 就是 template ...

$this->database->query ... 清楚明确 ... 该谁的事儿谁干 ...

但是很明显的 ... 我这就是在耦合了 ... 这是不提倡的行为 ...

现在的问题就是 ... 像这种独立可以完成一套操作的类 ...

我真的有必要将其内聚到系统里面么 ..?

大家都在说高内聚低耦合 ... 但是到底是为什么要这么做呢 ...?

功能模块之间内聚这是没有任何疑义的 ...

但是这样的独立存活也能活的有滋有味儿活色生香的类 ...

我将其内聚进来真的不是打乱了整个的逻辑给自己添麻烦么 ...?

希望各位前辈能指点一二 ... 多谢 ... :hug:

programmerhuang 发表于 2008-9-25 08:32

其实你改后的代码才是高内聚低偶合.
从一个基本的设计原则: 能使用组合(聚合)的尽量使用组合(聚合), 不要使用继承. 继承的偶合性比组合(聚合)要高.
在OO中, 继承是is a的关系, 也就是子类是一个父类. 而第一个代码来看module也是个database了, 这明显说不过去.
而有的设计者以为这样好调用, 就到处使用继承. 结果一个小对象, 弄的像一只大象.

"尘归尘土归土"
这句话我认同, OO设计时, 要分清责任, 不同责任的东西, 不一样的两个东西, 就算是代码基本上一样, 也不能提取到一起. 因为不一样的东西, 有一天他们会分的更开, 里面相同的代码, 也会慢慢的变的不同的.

看看所有的设计模式, 对具体对象的调用都是使用组合(聚合), 也就是has a的关系, 而继承也都是在is a的关系上.

PS: 你是学中文的? 厉害, 怎么跑来做程序了.

programmerhuang 发表于 2008-9-25 08:38

补充一下:
[b]内聚是同一个东西, 集中在一起, 便于维护[/b]
[b]偶合是对其它东西的依赖度, 便于修改. [/b]

楼主要第二个代码, module的模型就是内聚, 把module相关的东西放在一起了, 这样就是高内聚.
而把database改成组合了, 就是偶合, database可以根据需要使用其它的database类, 或不用database类, 这就低偶合了.

Sunyanzi 发表于 2008-9-25 08:44

啊 ... 黄老师天天在的么 ..? 这么快就有回复了 ...

有您这段话我就放心了 ... 看来我还没有非主流的太远 ...

一直担心如果用了后者就非主流了 ...

小象的好处就是要用什么都可以信手拈来 ... 而不用事必躬亲 ...

$this->砸 $this->剪 的 ...

$this->锤子->砸 $this->剪刀->剪 这样真好~~~~

程序 ... 我也不知道怎么就上了这条道 ... 算爱好吧 ...

自己写着玩玩赚个衣服钱 ... 天晓得我能走多远 ...

programmerhuang 发表于 2008-9-26 06:48

也没有天天在, 只是有时没事时, 上来溜溜, 刚好看到你的这贴

对, 小象比较灵活, 比较容易使用, 也比较高效.

我觉得你很有想法, 敢挑战主流, 呵呵, 感觉像是科班出来的.
那你一定买了很多衣服了吧.
有兴趣, 希望你能一直走下去, (嘻嘻, 又拖一个下水)
tukiz14

[[i] 本帖最后由 programmerhuang 于 2008-9-26 06:50 编辑 [/i]]

Sunyanzi 发表于 2008-9-28 09:49

科班出来的为了应付考试反而不敢像我这么横冲直撞了吧 ...

科班讲究的是“书上写的是高人总结的经验!它一定有它的道理!只是我现在还不明白!” ...

我这种江湖郎中就是随自己的性子来 ...

自由自在 ... 如果你不能说服我为什么 ... 我就坚持做自己觉得正确的事情 ... :lol:

pylong 发表于 2008-9-28 11:44

感觉一个内聚耦合等东西在一段代码很难说什么的

一个系统中,组件件的内聚和耦合,或许感受会深刻点

[[i] 本帖最后由 pylong 于 2008-9-28 11:47 编辑 [/i]]

shanji 发表于 2008-9-28 12:08

LZ如果有时间来夜色科普,一定很受欢迎!

programmerhuang 发表于 2008-9-29 06:38

[quote]原帖由 [i]Sunyanzi[/i] 于 2008-9-28 09:49 发表 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=621728&ptid=81086][img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
自由自在 ... 如果你不能说服我为什么 ... 我就坚持做自己觉得正确的事情 ... :lol: [/quote]
:victory::victory::victory:

programmerhuang 发表于 2008-9-29 06:40

回复 8# shanji 的帖子

科普什么, 剪刀锤子吗?

imkow 发表于 2008-9-30 19:04

杀鸡不用牛刀,

那些技巧都是杀牛用的,如果目标是鸡,会繁琐一些、。。。工作量会大

kilobug 发表于 2008-10-12 20:16

呵呵....
小项目就用快餐刀
中项目就用杀猪刀
大项目就用屠龙刀
tukiz04

adriandcb 发表于 2008-10-22 11:30

楼主是学中文的。中文和PHP一样,都是语言。很好很强大。tukiz11

lmhllr 发表于 2008-10-22 14:32

我只知道低耦合的话做下一个项目时把基础类库拿来用改动会更少。。。。:lol:

isno 发表于 2008-11-10 11:56

程序好坏 是用户来评论的

mx-wong 发表于 2008-11-10 18:12

尘归尘,土归土,顶一下。
在平常的使用中我也是把类中的功能分得很清楚,不想搞得像个大杂烩一样,调用是方便了要什么有什么,只是担心一点修改影响全局。
一粒。。。坏了一锅杂烩。。。:smile:

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.