Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design Java 9模块与DDD中的双重分派_Domain Driven Design_Java 9_Java Platform Module System_Java Module - Fatal编程技术网

Domain driven design Java 9模块与DDD中的双重分派

Domain driven design Java 9模块与DDD中的双重分派,domain-driven-design,java-9,java-platform-module-system,java-module,Domain Driven Design,Java 9,Java Platform Module System,Java Module,在我的一些项目中,我使用双重分派机制在运行时向域模块()提供基础结构模块的“视图”。上面我称之为“模块”的只是单独的jar文件,其中来自service.jar->domain.jar的依赖关系仅在编译时强制执行。如果我将我的服务和域定义为“真正的”Java9模块,那么我是否能够在java-9上使用它 module domain L Fee.java L Payment recordPayment(double, BalanceCalculator) L BalanceCalc

在我的一些项目中,我使用双重分派机制在运行时向域模块()提供基础结构模块的“视图”。上面我称之为“模块”的只是单独的jar文件,其中来自service.jar->domain.jar的依赖关系仅在编译时强制执行。如果我将我的服务和域定义为“真正的”Java9模块,那么我是否能够在java-9上使用它

module domain
  L Fee.java
      L Payment recordPayment(double, BalanceCalculator)
  L BalanceCalculator.java
module service
  L BalanceCalculatorImpl.java // implements BalanceCalculator
      L double calculate(Fee fee) //call fee.recordPayment(amount,this)

是的,这是可能的。以下是一些需要考虑的事项:

  • 模块域需要包含
    费用
    。可能对每个人都是这样,但至少是这样
  • 模块服务必须作为
    平衡计算器mpl
    必须作为
    平衡计算器
    ,因为它实现了平衡计算器
  • 看起来服务的客户也需要了解域,这是一个很好的例子
  • 在一个简单的设置中,服务或某个第三模块必须实例化
    BalanceCalculatorImpl
    并将其传递给
    费用
    ,这不能在域中发生,否则将创建循环依赖关系
  • 一个更高级的解决方案是,所有可以访问
    BalanceCalculator
    的代码,甚至在域内,都可以获得它的所有实现
  • 考虑到所有这些因素,这两种情况可能是这样的:

    module com.example.domain {
        // likely some requires clauses
    
        // export packages containing Fee and BalanceCalculator
        exports com.example.domain.fee;
        exports com.example.domain.balance;
    }
    
    module com.example.service {
        requires public com.example.domain;
        // likely some more requires clauses
    
        // expose BalanceCalculatorImpl as a service,
        // which makes it unnecessary to export the containing package
        provides com.example.domain.balance.BalanceCalculator
            with com.example.service.balance.BalanceCalculatorImpl;
    }
    
    然后,每个喜欢使用
    BalanceCalculator
    的模块都可以使用
    使用com.example.domain.balance.BalanceCalculator
    在其模块声明中声明它,并使用

    您可以在中找到模块系统(特别是服务)的更多实际应用


    (注:答案在之后进行了修订。)

    有什么解决办法或方法来定义一种运行时
    弱依赖关系吗?实际上你的树是错误的。在域中,我有一个接口,我们称之为BalanceCalculator,在我的服务中,我有它的实现,称之为BalanceCalatorImpl.java…..我在这种情况下被阻止了吗?你能更新你的问题以包含这些信息吗?最好在图表中。:)