dependency-injection - 如何在没有服务位置的情况下根据域对象中的汇率转换货币

标签 dependency-injection domain-object

This link描述了 Money 对象上的一个函数,用于将不同货币的资金加在一起。

首先我不想使用服务定位器模式。我目前使用的模式是不让 Money 对象自行进行转换。如果您尝试将不同的货币加在一起,它就会抛出。

我有一个拥有 Money 对象的对象(即 MultiCurrencyAccount)处理 Money 的数学运算。我的问题是我目前正在构造函数中将 IMoneyConverter 注入(inject) MultiCurrencyAccount 域对象。这对我来说感觉很脏,因为 IMoneyConverter 实际上是一种服务,它又使用 IForeignExchangeService(这个服务可以访问数据库)。我知道我不应该关心实现,因为我正在处理抽象,但感觉很奇怪。

我不确定我是否错了,将服务注入(inject)我的域对象是否“正确”,或者是否有更优雅的方法来做到这一点。

最佳答案

如果您将 Money 视为值对象(这很有意义),则很有可能为它们设计内置转换功能。

但是,由于您引用了有关领域驱动设计的链接,您应该问问自己,这是否真的是为货币建模的正确方法?

在大多数情况下,一捆美元不会神奇地把自己变成等值的欧元。您必须将它们带到某个兑换站才能将您的美元兑换成欧元。一旦你这样做了,现在你有欧元,没有美元。如果之后汇率发生变化,也不会影响您现在拥有的欧元数额。

我并不是说它会一直这样。最后,这取决于您的业务领域,但我认为如果您询问您的业务专家,您很可能会发现货币交易的业务规则与货币本身脱钩 .如果是这种情况,将货币兑换建模为与值(value)对象分开的服务更有意义。

关于dependency-injection - 如何在没有服务位置的情况下根据域对象中的汇率转换货币,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9138503/

相关文章:

c# - 在 ASP.NET MVC 解决方案中从我的域对象重构表示代码的最佳方法是什么?

domain-driven-design - "domain object"是代表业务规则的任何类吗?

java - EntityManagerFactory + jpadaosupport 的依赖注入(inject)问题

asp.net-core - 在没有 BuildServiceProvider() 的情况下为 ConfigureApplicationCookie 设置自定义 SessionStore

c++ - 模板和依赖注入(inject)

grails - 域对象上的 Class.forName newInstance 不是来自 grails 外部的 GroovyObject

字符串列表的 Grails 域命名查询

android - 如何在所有测试中轻松地用假货替换生产 Hilt 模块

c# - 带有 DI 简单注入(inject)器的 log4net

validation - Grails验证错误-开发人员与用户