根据领域驱动设计,在领域实体中使用来自第三方库的值对象是否可以接受?

问题描述 投票:0回答:1

我和我的团队正在为我们公司构建一个应用程序,我们需要使用 Java Money (JSR-354) 及其参考实现来表示货币价值。我们正在尝试按照 DDD 的准则构建此应用程序。为此,我们想了解在域实体内部使用诸如

javax.money.MonetaryAmount
之类的值对象是否可以接受(例如
Bill
)。

由于这将领域模型与第三方库结合在一起,这种做法在 DDD 的说法中被认为是正常的吗?

当我们此时使用这种安排时,我们想了解这是否被视为反模式,以及使用我们自己的价值对象来表示货币价值并在持久化期间移动

javax.money.MonetaryAmount
的使用是否理想(在内部)适配器)。

java oop design-patterns domain-driven-design java-money
1个回答
0
投票

依赖倒置原则规定高级模块不应该从低级模块导入任何内容。所以,域作为系统的中心不应该依赖于任何库。

因此,您可以为这些值对象创建自己的接口,并通过依赖注入使用它们。

这是理论上的。

但是如果我们更深入一点,为了理解为什么这个原则适用,我们需要考虑未来的变化概率。

域的更改频率低于应用程序的任何其他部分(例如 UI)。因此,领域不应该依赖于UI,以避免每次更改按钮颜色时都需要修复领域模型的情况。所以,我们需要使用依赖倒置来依赖抽象。

换句话说,你需要权衡库变更的风险。如果您认为库接口会发生变化或者您需要更换库,则不应直接使用它。创建一个抽象。

如果它是一个通用库,多年来没有改变其接口,并且只是一个可能使用的库,那么没有必要增加复杂性。

© www.soinside.com 2019 - 2024. All rights reserved.