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

问一个关于 Maven 循环依赖的问题

  •  
  •   binbinyouliiii · 2019-05-21 15:58:02 +08:00 · 2359 次点击
    这是一个创建于 2018 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设有:
    系统 A插件 B。系统 A 定义了接口,插件实现接口功能。
    但是出现了个依赖问题,因为插件 B是作为默认插件放入系统 A中的,所以 系统 A 依赖 插件 B。
    插件 B 因为要有系统 A 的接口来规范,所以也需要依赖系统 A。

    那么问题来了,这时候就会出现循环依赖问题,有什么解决办法吗?

    8 条回复    2019-05-22 10:54:39 +08:00
    loongwang
        1
    loongwang  
       2019-05-21 16:00:11 +08:00
    依赖倒置原则
    frienmo
        2
    frienmo  
       2019-05-21 17:00:01 +08:00
    所有 API 定义在 C 里,A 里面向接口 C 编程,B 实现接口 C。
    插件设计模式的话我们用的是 google autoservice
    palmers
        3
    palmers  
       2019-05-21 18:13:14 +08:00
    我也觉得这时候应该拆分 A
    binbinyouliiii
        4
    binbinyouliiii  
    OP
       2019-05-21 19:04:05 +08:00
    @frienmo
    @palmers
    我也想过拆分出来用 C 来实现,但是缺点是 1.我得把插件用到类全分出来,很多类是跟系统强耦合的,很麻烦。2.系统很多地方都需要使用可替换的“插件模式”,比如网络协议、序列化协议等,每个地方都得单独弄一个 C 模块,会显得比较乱。
    所以想知道有什么更加优雅的方式。
    mooncakejs
        5
    mooncakejs  
       2019-05-21 19:10:34 +08:00
    既然不想拆分,那就把 a 和 b 放一起。
    palmers
        6
    palmers  
       2019-05-21 19:54:52 +08:00
    1.“我得把插件用到类全分出来” 这个我觉得本来应该是一个协议或规范模块 独立的 没有任何依赖的
    2. “很多类是跟系统强耦合的” 这个含义是 需要拆分出来的类是系统 A 强耦合的吗?那么 A 可以依赖拆分得到的独立模块来解决
    3. ‘系统很多地方都需要使用可替换的“插件模式” ’ 这个也是这样 本来就应该将协议抽象

    按照你现在需求和我的理解, 你面临的就是因为模块不够独立 很多需要细化的子模块放到了一个模块中, 所以出现了依赖问题 如果将现在的模块进行拆分 细化 耦合就解掉了 我也遇到过这种问题 一般这种问题都是因为业务的不断变更造成的
    YzSama
        7
    YzSama  
       2019-05-22 08:35:12 +08:00 via iPhone
    抽插件 到顶层的 pom ?
    wc951
        8
    wc951  
       2019-05-22 10:54:39 +08:00 via Android
    依赖的 optional 设成 true
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1070 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:25 · PVG 06:25 · LAX 14:25 · JFK 17:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.