Domain driven design Java 9模块与DDD中的双重分派
在我的一些项目中,我使用双重分派机制在运行时向域模块()提供基础结构模块的“视图”。上面我称之为“模块”的只是单独的jar文件,其中来自service.jar->domain.jar的依赖关系仅在编译时强制执行。如果我将我的服务和域定义为“真正的”Java9模块,那么我是否能够在java-9上使用它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
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…..我在这种情况下被阻止了吗?你能更新你的问题以包含这些信息吗?最好在图表中。:)