V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hxndg
V2EX  ›  C

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

  •  
  •   hxndg · 2016-03-30 10:04:17 +08:00 · 2996 次点击
    这是一个创建于 3190 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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