代码耦合究竟是什么?怎么划分呢?

2016-03-30 10:04:17 +08:00
 hxndg

我有的时候会遇到这样子的问题,这个功能谁来实现,其他类要不要包含这样子类似的功能,这个功能应该作为子函数,还是全局函数?这些东西到底如何来划分呢?有没有什么可以指导的书籍推荐呢?有的时候第二天看自己第一天写的代码就觉得层次划分真是太乱了!

2855 次点击
所在节点    C
17 条回复
tinyproxy
2016-03-30 10:14:52 +08:00
1. 写多了就知道了,现在不知道就按照感觉写,不行重构。
2. 我的做法是,常改的地方遵循设计模式,万年不动的地方随便写。
SourceMan
2016-03-30 10:16:57 +08:00
代码耦合:你把 360 卸载了,系统就蓝屏后再也进入不了桌面了
mengzhuo
2016-03-30 10:21:23 +08:00
一看就是 unix 系统用得少的思路
所有函数只干一件事。只有一个结果。
ershisi
2016-03-30 10:46:42 +08:00
一个函数最多做两件事情。每个功能尽量保证独立。不要让你的逻辑与你的代码混杂在一起。这是我理解的耦合。
hxndg
2016-03-30 10:54:59 +08:00
@mengzhuo 我还是不太理解,什么叫做函数只有一个结果?比方说我一个命令“探测”,参数可能有-p 表示 ping ,-i 表示 icmp ,那么所谓的一个函数一个结果是不是值一个函数实现 ping 探测,一个函数实现 icmp 探测?当然我的例子觉得可能不是很对毕竟 ping 就是 icmp
hxndg
2016-03-30 10:56:17 +08:00
@ershisi 所谓的逻辑和代码混合在一起能不能再解释以下呢?逻辑是什么意思,我代码写的过程也要有逻辑阿?
hxndg
2016-03-30 10:57:07 +08:00
@SourceMan 我没理解笑点哈, 360 卸了和耦合啥关系?
hxndg
2016-03-30 10:57:48 +08:00
@tinyproxy 好的,我再去看看设计模式,总觉得代码行数不多的程序用设计模式有杀鸡用牛刀的干胶
mengzhuo
2016-03-30 11:08:06 +08:00
@hxndg
理解得不对,一个函数只干一个事情,你的“探测”已经属于上层 API 了。
函数实现 ping 另一个函数实现 tcp port scan
探测调用 ping 和 tcp port scan ,总结果汇总,调用输出函数做数据序列化。

ps 设计模式=设计思路,如果你的本身思路不对,偏偏要用另一种思路来解决,有点拉猪上树的味道了。
ershisi
2016-03-30 11:18:57 +08:00
@hxndg 你去了解一下面向对象编程思想。这个不好跟你解释。对于“过程式编程”这个词语也可以去了解一下。对这些有了概念,应该就明白什么叫做逻辑与代码分开了。
cheng4741
2016-03-30 11:27:41 +08:00
@hxndg 这不是杀牛和杀鸡的问题,我觉得设计模式可以改变你解决问题的思考习惯。推荐《 headfirst 设计模式》,简单易懂。四人组的那本《设计模式》是最全面的,但读起来太累了。
znoodl
2016-03-30 12:35:52 +08:00
对象编程就是为了工程而设计,代码设计低耦合高内聚
sprite0616
2016-03-30 12:53:36 +08:00
书可以看《代码大全》,代码的话,就找些开源软件看。
eliteYang
2016-03-30 16:02:55 +08:00
代码耦合主要表现是代码可维护性差,牵一发而动全身。怕代码耦合,我给你一种建议,就是面向接口编程,这也是我们开源项目的主要设计思路, github 地址: https://github.com/ketoo/NoahGameFrame ,可以参考下我们的代码,希望对你有帮助
JohnSmith
2016-03-30 17:00:37 +08:00
@mengzhuo 无副作用,函数式编程
JFW
2016-03-30 18:37:25 +08:00
我们现在的架构是,即使换了个表示层,只要数据结构没变化,随便切换....
ihuotui
2016-03-31 01:47:38 +08:00
重构即改善代码 thought works 的书

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/267270

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX