我试图避免以贫乏的域模型结束,所以我试图在域模型本身中保留尽可能多的逻辑。我有一个名为 的方法AddIngredient
,它需要KeyedObject
向我的Recipe
聚合中添加一个新方法。
由于域模型本身意味着没有存储库,因此我通过业务规则类获取成分:
public class Recipe : AggregateObject
{
public void AddIngredient(int ingId, double quantity)
{
GetIngredientMessage message = new GetIngredientMessage();
message.IngredientId = ingId;
GetIngredient handler = ServiceLocator.Factory.Resolve<GetIngredient>();
Ingredient ingredient = handler.Execute(message);
Ingredients.Add(new OriginalIngredient()
{
Ingredient = ingredient,
Quantity = quantity
});
}
}
如您所见,我正在使用一条线ServiceLocator.Factory.Resolve<GetIngredient>();
来获取我的GetIngredient
业务规则类。GetIngredient
是一个简单的命令处理程序,如下所示:
public class GetIngredient : ICommandHandler<Ingredient, GetIngredientMessage>
{
private readonly IIngredientRepository _ingredientRepository;
public GetIngredient(IIngredientRepository ingredientRepository)
{
_ingredientRepository = ingredientRepository;
}
}
我将我的 IoC 工厂类分配给ServiceLocator.Factory
,因此 Domain 可以使用自己的接口,而无需查看具体的类实现:
ServiceLocator.Factory = new IoCFactory();
我很确定我做错了什么,因为这一切都感觉有点像笨蛋。
- 谁能发现任何明显的错误?
- 是否有更合适的方法来实例化业务规则处理程序,例如
GetIngredient
没有对我的 IoC 工厂的静态引用?