请问如何说服工作 5、6 年的同事不要把两三千行的逻辑写在一个类里? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qingchengdev
V2EX    职场话题

请问如何说服工作 5、6 年的同事不要把两三千行的逻辑写在一个类里?

  •  
  •   qingchengdev 2016-04-21 01:14:56 +08:00 5180 次点击
    这是一个创建于 3463 天前的主题,其中的信息可已经有所发展或是发生改变。

    我毕业快一年了。和另外一个搭档同事都是最近刚入职的新人。之前偶尔代码 Review 的时候发现他很喜欢把逻辑都写在同一个类里,不过注释用中文写得很详尽,所以还是能读的,但我觉得这样不太好,而且以后我们两个可以说是互为相依为命的角色,所以一直想找个机会告诉他。 所以趁着这个一个新的模块开始的时候,对模块的整体结构提了一些建议,整个模块可能两三千行代码的规模,建议划分成 4~5 个类来实现,他也同意这样划分在逻辑上是很清晰的,但觉得这样太细了,可能有些过度设计了。他最后坚持要写在一个类里,觉得代码分散在四五个文件里面可以维护,集中在一个文件里面也是可以维护的。我听到这样的想法突然觉得无力反驳,于是作罢了。 另外,我们的项目有充裕时间。

    事后我也有反省自己,我是不是控制欲太强,太喜欢指手画脚了呢?虽然我心里确实有倾向,也有答案。但还是想来听听前辈们怎么说。

    第 1 条附言    2016-04-21 08:44:20 +08:00
    看来这个问题的确是有争议的。补充一些信息如下:
    代码是 C#,模块是作为一个或多个组件附加到场景中的节点上的。
    代码拆分后的职能是清晰的而且达成共识了的,我们只是在纠结有没有必要分得这么细。
    这个模块对外的主要接口是外部传入入一组比较的复杂的 Model ,然后根据这个 Model 去控制各个 UI 组件的交互和更新,另外我们的分歧也就是指是由一个类来控制所有 UI 组件,还是分解成主从类来控制。
    第 2 条附言    2016-04-21 10:59:41 +08:00
    如果都在一个类里面,随着逻辑的复杂、成员变量的增加,阅读代码的复杂度会呈指数级上升吧?这是否会给后期的维护带来困难呢。还是说通过控制代码质量来防止成员变量的泛滥,或者说使用一种类似于面向过程的思路来防止这种情况的发生。
    不过看到各位前辈回答时谨慎的态度,也可以看到这个问题还是值得考量的,我开始还以为这种拆分应该是一种常识呢。看来还是 Native 啊。
    27 条回复    2016-04-22 09:31:57 +08:00
    ShengjiaWANG
        1
    ShengjiaWANG  
       2016-04-21 02:22:36 +08:00
    不管怎么说,两三千行也实在太多了...
    dapang1221
        2
    dapang1221  
       2016-04-21 02:30:24 +08:00 via Android
    能把逻辑实现出来而且有注释就行了……个人习惯不同。。
    主要是我觉得吧,把一些肯定不会复用的代码重新写进个类里,以及把一个比较连贯的逻辑拆得到处都是代码,这样有时也真挺烦人的……
    binux
        3
    binux  
       2016-04-21 02:31:39 +08:00
    两三千行不是一个函数的话,还好。
    取决于类分开之后,新增一个函数,你们能不能不经过讨论,就函数放到哪个类里面达成共识。
    如果不能的话,拆分其实是失败的。
    ipconfiger
        4
    ipconfiger  
       2016-04-21 02:48:57 +08:00
    关键是这个巨型类的功能是否也是一个瑞士军刀一样的大杂烩啊?
    hbkdsm
        5
    hbkdsm  
       2016-04-21 07:56:01 +08:00 via Android
    Rails 里面一个 model 两三千行很常见
    qingchengdev
        6
    qingchengdev  
    OP
       2016-04-21 08:44:49 +0:00
    @ShengjiaWANG
    @dapang1221
    @binux
    @ipconfiger
    @hbkdsm
    谢谢你们的回复,已 Append 更详细的信息。
    bk201
        7
    bk201  
       2016-04-21 09:24:37 +08:00
    看你的 append 我个人觉得这种情况确实拆开好,主要考虑到耦合度。
    riverphoenix
        8
    riverphoenix  
       2016-04-21 09:28:10 +08:00
    我现在超过三百就觉得看不下去了
    lincanbin
        9
    lincanbin  
       2016-04-21 09:32:58 +08:00
    有 IDE 的快速查找的话其实问题不大。
    只要每个方法的行数不要太多就好了。
    LINAICAI
        10
    LINAICAI  
       2016-04-21 09:36:50 +08:00
    传说中的 c 程序员?面向函数编程。。。
    LINAICAI
        11
    LINAICAI  
       2016-04-21 09:38:25 +08:00
    两三千行都写在一个类,如果业务逻辑不能再细分了的话,勉强能接受吧。
    但这情况也是很极端的吧
    Actrace
        12
    Actrace  
       2016-04-21 09:42:12 +08:00
    要根据程序模块划分!
    要根据程序模块划分!
    要根据程序模块划分!
    重要的事情说 3 次。
    anerevol
        13
    anerevol  
       2016-04-21 09:44:11 +08:00 via Android
    感觉拆不拆都行,毕竟功能职责单一。 如果有些代码能抽成可以公用的代码的话,是可以分一分的。
    22too
        14
    22too  
       2016-04-21 09:44:50 +08:00
    只要不是 python 程序就行。(逃
    SpicyCat
        15
    SpicyCat  
       2016-04-21 09:49:02 +08:00
    单个类还好吧,一般编程规约都是规定单个函数不能太长。
    yhxx
        16
    yhxx  
       2016-04-21 09:50:48 +08:00
    前几天听说某宝前端要求一个 js 文件不能超过 130 行
    dong3580
        17
    dong3580  
       2016-04-21 09:51:33 +08:00
    单个类倒是没问题吧,看是不是在一个方法里;
    如果项目比较大,到可以根据业务,或者逻辑划分,
    qingchengdev
        18
    qingchengdev  
    OP
       2016-04-21 10:57:11 +08:00
    @lincanbin
    @anerevol
    @SpicyCat
    @dong3580
    如果都在一个类里面,随着逻辑的复杂、成员变量的增加,阅读代码的复杂度会呈指数级上升吧?这是否会给后期的维护带来困难呢。还是说通过控制代码质量来防止成员变量的泛滥,或者说使用一种类似于面向过程的思路来防止这种情况的发生。
    jackal
        19
    jackal  
       2016-04-21 10:57:46 +08:00
    "以后我们两个可以说是互为相依为命的角色"
    ||
    >>>这就决定了,你可以跟对方说说, 只要说清楚了,对方最后不同意和接受, 你就最好不要再提这个事情了。

    ”如何说服。。。。。。?“==========>>>这事情本质上跟技术无关。
    3dwelcome
        20
    3dwelcome  
       2016-04-21 11:04:46 +08:00 via Android
    何必勉强别人呢、说服人是件很难的事。谁写的代码谁来维护、每个人代码风格都不一样。

    当然、如果你能混到技术负责人、就可以强推代码规范了。
    karlakte
        21
    karlakte  
       2016-04-21 12:49:56 +08:00
    他软的源码 一个文件超过 1 万行的都有。关键看文件内代码的模块功能 /业务相关性。允许拆开,当然是拆开好咯。
    harry890829
        22
    harry890829  
       2016-04-21 12:51:34 +08:00
    我刚进新公司,正在看项目代码,纯 c 的代码,文件近 2w 行,有一个函数就是 7.5k 行
    jy01264313
        23
    jy01264313  
       2016-04-21 14:20:55 +08:00
    打车求教,如果说服一个工作 10+ 的 J2EE 人不用要 tab 换行?总有一些 python 代码被他无意间碰到,最后不能运行了。
    loryyang
        24
    loryyang  
       2016-04-21 14:23:30 +08:00
    直接说,难!
    这种事情可以尝试走这个路线,私下找技术负责人,提出这个建议,然后促使技术负责人立下规定,所有组员都要遵守,你就可以拿这个当令箭了
    xdazz
        25
    xdazz  
       2016-04-21 14:44:16 +08:00
    制定,制行的可以在中央置 hook 查,不符合的直接 reject 掉不提交。好好通。
    Tneciv
        26
    Tneciv  
       2016-04-21 18:30:41 +08:00
    @jy01264313 悄悄改下他的 ide 设置就好了
    jy01264313
        27
    jy01264313  
       2016-04-22 09:31:57 +08:00
    @Tneciv 我现在的解决方案是,看见 J2EE 的人就直接 PASS
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     922 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 21:37 PVG 05:37 LAX 14:37 JFK 17:37
    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