代码拆分模块或者拆分包的时候,应该先根据功能分还是先根据业务分? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
wuyazi
V2EX    Go 编程语言

代码拆分模块或者拆分包的时候,应该先根据功能分还是先根据业务分?

  •  
  •   wuyazi
    wuyazi 2018 年 10 月 4 日 5069 次点击
    这是一个创建于 2710 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如:
    先根据功能分:
    RpcServer.Message.SendMessage
    RpcServer.Auth.Login
    先根据业务分
    Message.RpcServer.SendMessage
    Message.HttpServer.GetMessageList
    10 条回复    2018-10-15 11:47:02 +08:00
    xy90321
        1
    xy90321  
       2018 年 10 月 4 日 via iPhone
    没有一刀切的情况
    我的话一般 common 部分根据功能切分为主
    其余根据业务>功能的顺序去切分为主(因为考虑到今后可能会变成 common )
    hualongbei
        2
    hualongbei  
       2018 年 10 月 4 日
    一楼 +1
    单纯根据功能分的或许是很小的项目?
    我一般根据业务划分,功能公用的抽出来
    alqaz
        3
    alqaz  
       2018 年 10 月 4 日
    牵扯到业务肯定是业务了。相对底层的根据功能。
    scnace
        4
    scnace  
       2018 年 10 月 4 日 via Android
    https://medium.com/@hatajoe/clean-architecture-in-go-4030f11ec1b1 看下这篇 需要根据项目总体的预期架构来分
    xuanbg
        5
    xuanbg  
       2018 年 10 月 4 日
    自然是要根据业务划分模块的,否则你和人沟通都不好沟通。业务人员只懂业务,业务是成体系的,你和他讲东一个西一个零散的功能,完全就是鸡同鸭讲。

    然而,不同业务会有相同的功能需求,譬如用户、收款、退款之类,也是最正常不过的事情。这类共同的功能,则可以抽象出来,单独形成一个独立模块,业务需要的时候,调用就好了。现在流行微服务,基本上每个模块都可以做成一个独立服务。
    HuHui
        6
    HuHui  
       2018 年 10 月 4 日 via Android
    看复杂度
    taowen
        7
    taowen  
       2018 年 10 月 4 日
    没有什么是“应该的”。你要先明白自己要什么,才知道什么是“好”的。按照我的视角,好的模块划分的标准是

    1、首先要让模块负责。从业务产出的角度来说,有可衡量的指标。你可以是按所谓的“功能”分,比如把处理 RPC 的中间件拆分成独立的库,让他们负责稳定性。也可以按所谓的“业务”分,比如这个模块就负责商品页的流量转化,如果流量转化效率高,他们就干得不错。
    2、其次是让模块之间具有相对独立性。如果可能,一个需求需要改动的模块越少越好。参与的模块越少,就参与的人越少,就沟通越少,所以效率就会越高。
    3、最后是鼓励模块的复用。好的架构是具有前瞻性的,可以今天的投资,明天拿到更多的回报。比如搞一些提高开发效率,搞一些和领域相关的中台沉淀的事情。

    accountable >> autonomous > amortization
    taowen
        8
    taowen  
       2018 年 10 月 4 日
    更多信息可以参考我在 medium 上写的文章: https://medium.com/software-engineering-problems
    darklowly
        9
    darklowly  
       2018 年 10 月 10 日
    @scnace 感觉这个 demo 太简单,太理想化了,在实际生产环境中,稍微复杂一点的项目并不合适。

    例如 参数过滤,分页,那么 repository 这里必须要知道这些参数。当然你可以传到 repository 里面,参数多起来,整个函数看起来,非常丑。

    又例如,事务处理,也是类似的
    reus
        10
    reus  
       2018 年 10 月 15 日
    Send
    Login
    分那么多干嘛,以为自己系统很大吗。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2552 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 15:40 PVG 23:40 LAX 07:40 JFK 10:40
    Do have faith in what you're doing.
    ubao msn 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