代码耦合究竟是什么?怎么划分呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hxndg
V2EX    C

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

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

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

    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     Solana     5839 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 02:58 PVG 10:58 LAX 19:58 JFK 22:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86