V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
www5070504
V2EX  ›  程序员

想请教下各位大手子 如何把代码写得很"工程化"

  •  
  •   www5070504 · 2020-05-27 10:19:16 +08:00 · 4940 次点击
    这是一个创建于 1668 天前的主题,其中的信息可能已经有所发展或是发生改变。

    lz 写 python 两年了 总感觉代码不够工程化(对比 java 或 c ) 有点随心所欲的意思 现在就想规范下自己那些不好的习惯 请问下各位有什么技巧或者见解么

    第 1 条附言  ·  2020-05-27 12:26:32 +08:00
    给每个回复的老哥点赞 多谢各位的建议

    虽然知道了方法论 但是感觉还是好难啊

    还是多谢各位老哥
    30 条回复    2020-05-28 12:46:09 +08:00
    www5070504
        1
    www5070504  
    OP
       2020-05-27 10:19:44 +08:00
    先谢谢各位老哥
    kop1989
        2
    kop1989  
       2020-05-27 10:29:08 +08:00   ❤️ 1
    不懂 python
    但是从方法论上讲,无非就是高内聚、低耦合、可读性高。
    xuanbg
        3
    xuanbg  
       2020-05-27 10:31:51 +08:00   ❤️ 1
    不用奇技淫巧,老老实实写:容易读懂,容易维护,容易扩展,稳定可靠的代码。
    q8164305
        4
    q8164305  
       2020-05-27 10:33:25 +08:00 via Android   ❤️ 3
    先保证不写重复代码,你自然知道如何工程化
    opengps
        5
    opengps  
       2020-05-27 10:34:31 +08:00 via Android   ❤️ 1
    我写代码就是如此,当年用非常原始的代码风格撑起了几十万的 GPS 并发,后来终于有资深一点的工程师参与,做了几层拆分,不过反而从此不在追加新功能了,毕竟框架的意义是多人分工,而不是让编码更灵活
    guolaopi
        6
    guolaopi  
       2020-05-27 10:36:14 +08:00   ❤️ 1
    想起了两个大佬撕逼,
    一个说都 21 世纪了,js 的 express 还直接把所有业务逻辑都写到一起。
    另一个说:是,我不用写一个方法都要封装几十层的类,
    (滑稽
    nightwitch
        7
    nightwitch  
       2020-05-27 10:38:49 +08:00   ❤️ 1
    -Werror
    ytmsdy
        8
    ytmsdy  
       2020-05-27 10:39:08 +08:00   ❤️ 1
    python 的话,别写一些花式语法就好了。
    vitoliu
        9
    vitoliu  
       2020-05-27 10:41:41 +08:00   ❤️ 1
    @opengps 原始代码,几十万 GPS 并发,拆分,框架。
    vitoliu
        10
    vitoliu  
       2020-05-27 10:42:10 +08:00
    @opengps 真大佬
    opengps
        11
    opengps  
       2020-05-27 13:00:57 +08:00 via Android
    @vitoliu 其实很小的,4 层通信不像 7 层那么浪费资源,我从前东家走的时候已经上百万设备了,用了也就 100 台左右低配 ECS 服务器分流负载
    SpiderXiantang
        12
    SpiderXiantang  
       2020-05-27 14:13:30 +08:00 via Android   ❤️ 1
    玩一下 tdd
    zhuangzhuang1988
        13
    zhuangzhuang1988  
       2020-05-27 14:27:43 +08:00   ❤️ 1
    python 的话学 tornado 下呗
    wmhx
        14
    wmhx  
       2020-05-27 14:30:54 +08:00   ❤️ 1
    多看看大佬的代码
    newdongyuwei
        15
    newdongyuwei  
       2020-05-27 15:30:46 +08:00   ❤️ 1
    整体架构搞好,把 lint 和 test 加上。工程化就是既要开发效率 /迭代速度,也要代码质量。这些是通用的,跟用不用 Python 没有关系。好的开发框架其实就为工程化打好了基础。
    tt67wq
        16
    tt67wq  
       2020-05-27 17:03:18 +08:00   ❤️ 1
    把你觉得工程化的代码抄过来,说是你写的
    seki
        17
    seki  
       2020-05-27 17:04:18 +08:00
    买一本代码大全看看吧
    fancy2020
        18
    fancy2020  
       2020-05-27 17:07:14 +08:00   ❤️ 2
    设计一个功能的时候多想想“意外情况”,我觉得工程化的很重要的一方面就是对错误分支的处理
    laike9m
        19
    laike9m  
       2020-05-27 17:16:46 +08:00 via Android   ❤️ 2
    工程化的核心就两条:可读性、可扩展性(或者说 easy to change )。

    做到这两点基本上就没什么问题了。这也是为什么我很烦一些 Java 的范式(比如 Guice ),为了一些所谓的便利严重牺牲了代码可读性,当然深层原因还是语言本身。就 Python 来说,主要还是不要沉迷黑魔法,尽可能用大家都看得懂的方式写代码,不要老想着做一行超人。如果一定要用,就多写点注释吧。

    至于可扩展性,个人觉得主要还是跟具体场景有关。虽然也有些通用原则比如高内聚低耦合啥的,但落实到具体的项目,还是依赖于你首先把整个逻辑理清楚,再考虑哪些东西是未来有可能要变的。
    nuistzhou
        20
    nuistzhou  
       2020-05-27 17:27:18 +08:00 via iPhone   ❤️ 1
    因为经验的关系,单纯看好的代码你可能无法 get 到那个点,去看看<Clean Code>吧,至少对我挺有帮助。
    noobcoder1
        21
    noobcoder1  
       2020-05-27 17:41:14 +08:00   ❤️ 1
    多封装,多抽象,撸码前多考虑一下现在和将来就行了....不要为了工程化而工程化,稳定才是第一位
    wleexi
        22
    wleexi  
       2020-05-27 17:54:36 +08:00   ❤️ 1
    PY 确实不那么容易的工程化吧,JAVA C 这俩都有业界规范,老哥学一个玩玩感受下?
    Nostalgiaaaa
        23
    Nostalgiaaaa  
       2020-05-27 18:20:12 +08:00
    https://github.com/Nostalgiaaa/foreman_pylint

    不要脸的发个小工具,多用代码质量检查工具,多分分层啥的。
    SorcererXW
        24
    SorcererXW  
       2020-05-28 00:43:06 +08:00   ❤️ 1
    @q8164305 #4 不是不写重复代码就是好的工程代码,(尤其是新手工程师)从一开始就各种封装抽象,导致扩展性不够,后期需求变动导致更难修改。
    23571113
        25
    23571113  
       2020-05-28 01:25:34 +08:00 via Android   ❤️ 1
    工程=业务逻辑+框架。业务逻辑靠刷题,框架设计模式八股文。
    evaseemefly
        26
    evaseemefly  
       2020-05-28 08:30:55 +08:00
    也在关注这个
    lancelock
        27
    lancelock  
       2020-05-28 09:00:12 +08:00 via iPhone
    感觉 java 的做法有点过头了
    xavierxiu
        28
    xavierxiu  
       2020-05-28 11:04:32 +08:00
    @opengps 不是 QPS 吗
    opengps
        29
    opengps  
       2020-05-28 11:23:28 +08:00
    @xavierxiu GPS 终端业务,从我名字可以联想下,我不是在说 QPS 指标,按照业务场景转化下,可以认为是十分之一到 20 分之一的终端数可以约等于 QPS
    AvenirX
        30
    AvenirX  
       2020-05-28 12:46:09 +08:00 via iPhone
    楼上都是工程大神...
    我的建议是根据实际需求来,不要为了“工程化”而去“工程化” 不然适得其反。写了一段只会用到一两次的过程化的代码,何必搞成各个模块条条框框?以后你还能看懂吗?

    某段代码每次随着需求改来改去?某些功能需要复用到另一个工程?有些参数牵一发动全身?... 有了这些需求你再去请教应该用什么方式去优化。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2102 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:47 · PVG 08:47 · LAX 16:47 · JFK 19:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.