我有一个实体,Exchange。 Exchange需要在启动时填充VO列表,即CurrencyPair。 CurrencyPair的集合作为主数据存储在数据库中,并具有名为ICurrencyPairRepository的存储库以获取所有可用的货币对。所以我想在应用程序启动后在Exchange实体中获取CurrencyPair集合。
我的问题是,我可以直接将ICurrencyPairRepsoitory的实现注入Exchange吗?或者是否应该有一个从存储库中获取CurrencyPairs的基础结构服务实现?(当然,ICurrencyPairRepository接口位于域层内,它的实现位于基础结构层中)
或者我应该在Exchange中注入应用程序服务?我们是否只允许将域服务注入实体或其他服务/存储库也可以注入?
使用案例
在启动时,交易所需要获得允许在应用程序中交易的所有货币对。每当新订单进入Exchange时,它都包含它想要交易的货币对。然后,交易所需要检查是否允许交易该货币对。如果是,则转发订单,否则丢弃请求。
由于Exchange是一个聚合根,我可以从应用程序启动的位置对其进行初始化,并为其提供一组货币对,但我很想知道允许在实体中注入什么,这也是聚合根在这种情况下。
答案 0 :(得分:0)
对于某些人来说,将存储库依赖项直接注入实体是可以接受的,我个人不喜欢这个解决方案。当您处理基础设施(SRP违规)时,很难关注行为。
我通常尝试做的是一个应用程序服务,它检索实体所需的全部信息......然后我真的很容易测试和编写行为。