可复用性高的 Java web 项目,区分不同语言版本,应该使用怎样的代码结构 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
delpo

可复用性高的 Java web 项目,区分不同语言版本,应该使用怎样的代码结构

  •  
  •   delpo Dec 27, 2019 2332 views
    This topic created in 2312 days ago, the information mentioned may be changed or developed.

    公司之前只有国内业务的时候,就一个 maven 项目就能解决问题

    现在业务要扩展到多个国家 /地区,按照老板的设想,要在每个地区部署相应的版本

    每个地区版本的差异只有语言 /支付 /优惠,其他代码都是可复用的

    那么应该选择怎样的代码组织方式

    现在我初步的设想是,所有代码都放在一个项目里,将已有项目抽象为 common 包,然后不同地区的特有代码放到 cn/jp 一类的包中,然后部署时用 maven 的 profile 配置,对不同的确的配置进行打包

    不知道这么做未来有没有什么问题,或者各位有什么更好的实践方式,不吝赐教

    13 replies    2019-12-27 17:44:54 +08:00
    wysnylc
        1
    wysnylc  
       Dec 27, 2019 via Android
    至少有一点,多写注释
    qwerthhusn
        2
    qwerthhusn  
       Dec 27, 2019
    直接把基础部分抽出一个独立工程项目,其余的每个地方都是一个独立工程(引用就行了),不然单一个工程会变得很大

    干过菊花外包的码畜表示:这种基线+定制的模式最终会使版本变得很复杂,得看公共部分写代码的人的水平
    zhazi
        3
    zhazi  
       Dec 27, 2019 via Android
    就讨厌你们这群瞎分包的
    lhx2008
        4
    lhx2008  
       Dec 27, 2019 via Android
    语言可以前端搞,支付和优惠前端带个标识符就行了
    wangxiaoaer
        5
    wangxiaoaer  
       Dec 27, 2019
    一个大工程,涉及到需要区分的放到不同的资源文件中,maven package 的时候加载不同的资源,生成 n 个包,这是打包时区分。

    一个大工程,涉及到需要区分的放到不同的资源文件中,maven package 的时候只加载公用资源,生成 1 个包,这是运行时区分,运行的时候再根据当前环境指定对应的资源文件(类似 spring boot 的 active profile )。

    我倾向于第二种,原因有 2:

    1 更高效:第一种会导致打包耗时,想象一下改一个小 bug,然后打 10 几个包,等待很痛苦,这还是使用了 ci 的情况下,如果手动就更要死人了。
    2 更灵活:第一种方案把资源文件固化到包里了,如果临时有修改,要重新打包。
    300
        6
    300  
       Dec 27, 2019 via Android
    现在的这个安卓项目大概就是这种需求

    里面都是大量的 if else。。。看着人抓狂
    wangxiaoaer
        7
    wangxiaoaer  
       Dec 27, 2019
    还有一种方案,所有有区别的内容比如站点名称、语言包都提供管理接口,存储到数据库, 这样应用本身就不需要区分了。
    sheeta
        8
    sheeta  
       Dec 27, 2019
    参考 wordpress, 一份代码走天下
    Michaelssss
        9
    Michaelssss  
       Dec 27, 2019 via Android
    每个地区单独演进,不存在分包
    Cbdy
        10
    Cbdy  
       Dec 27, 2019
    建议一份代码就可以了
    murmur
        11
    murmur  
       Dec 27, 2019
    i18n 坑多的很,尤其是涉及穆 S 林国家,真的敢框架一把撸?
    W1angMh
        12
    W1angMh  
       Dec 27, 2019
    前端做国际化 后端用一套代码就行了
    xuanbg
        13
    xuanbg  
       Dec 27, 2019
    把语言做成前端资源,不同语言访问不同的路由就完了。后端就是一套,因为语言不涉及业务逻辑。
    About     Help     Advertise     Blog     API     FAQ     Solana     886 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 51ms UTC 22:05 PVG 06:05 LAX 15:05 JFK 18:05
    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