V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
delpo
V2EX  ›  程序员

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

  •  
  •   delpo · 2019-12-27 09:21:14 +08:00 · 1976 次点击
    这是一个创建于 1801 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

    里面都是大量的 if else。。。看着人抓狂
    wangxiaoaer
        7
    wangxiaoaer  
       2019-12-27 09:59:04 +08:00
    还有一种方案,所有有区别的内容比如站点名称、语言包都提供管理接口,存储到数据库, 这样应用本身就不需要区分了。
    sheeta
        8
    sheeta  
       2019-12-27 10:03:19 +08:00
    参考 wordpress, 一份代码走天下
    Michaelssss
        9
    Michaelssss  
       2019-12-27 10:14:37 +08:00 via Android
    每个地区单独演进,不存在分包
    Cbdy
        10
    Cbdy  
       2019-12-27 11:17:24 +08:00
    建议一份代码就可以了
    murmur
        11
    murmur  
       2019-12-27 11:19:51 +08:00
    i18n 坑多的很,尤其是涉及穆 S 林国家,真的敢框架一把撸?
    W1angMh
        12
    W1angMh  
       2019-12-27 17:43:03 +08:00
    前端做国际化 后端用一套代码就行了
    xuanbg
        13
    xuanbg  
       2019-12-27 17:44:54 +08:00
    把语言做成前端资源,不同语言访问不同的路由就完了。后端就是一套,因为语言不涉及业务逻辑。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   917 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:27 · PVG 04:27 · LAX 12:27 · JFK 15:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.