我理解DI背后的概念,但我只是在学习不同的IoC容器可以做什么.似乎大多数人都主张使用IoC容器来连接无状态服务,但是如何将它们用于实体等有状态对象呢?
无论是对还是错,我通常会用行为填充我的实体,即使这种行为需要外部类.例:
public class Order : IOrder
{
private string _ShipAddress;
private IShipQuoter _ShipQuoter;
public Order(IOrderData OrderData, IShipQuoter ShipQuoter)
{
// OrderData comes from a repository and has the data needed
// to construct order
_ShipAddress = OrderData.ShipAddress; // etc.
_ShipQuoter = ShipQuoter;
}
private decimal GetShippingRate()
{
return _ShipQuoter.GetRate(this);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,依赖项是Constructor Injected.现在提出几个问题.
让您的实体依赖于诸如ShipQuoter之类的外部类别是否被视为不良做法?如果我正确理解定义,消除这些依赖性似乎会导致我陷入贫血领域.
使用IoC容器来解决这些依赖关系并在需要时构建实体是不好的做法吗?是否有可能做到这一点?
感谢您的任何见解.
entities dependency-injection castle-windsor ioc-container inversion-of-control
假设我有一个基于CQRS的系统,我的域需要来自外部Web服务的一些数据来做出决定.我该如何正确建模?
我可以想到两个选择:
命令处理程序运行域逻辑,域本身调用Web服务.一旦获得响应,它就会将适当的事件附加到当前聚合并存储它们.该域基本上"等待"Web服务返回.
命令处理程序运行域逻辑,域立即发出域内部更多数据所需事件.进程管理器对此作出反应,与Web服务进行通信,对结果做出反应,并在前一个聚合上创建另一个命令,基本上是诸如继续之类的事情.
哪种方法"更好",或者都是错误的,我应该采用完全独立的方式?基本上,我对选项1很好,因为我认为这基本上只是一个长期运行在域内的计算,但不知何故,"等待"的想法让我感到恼火.
我该怎么办?