私は貧血のドメインモデルで終わることを避けようとしているので、ドメインモデル自体の中で可能な限り多くのロジックを維持しようとしています。と呼ばれるメソッドがあります。これは、AggregateAddIngredient
に新しいものを追加する必要があります。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
ので、ドメインは具体的なクラスの実装を見ることなく、独自のインターフェイスを使用できます。
ServiceLocator.Factory = new IoCFactory();
すべてが少しボッジのように感じられるので、私は何か間違ったことをしていると確信しています。
- 誰かが露骨に間違っているものを見つけることができますか?
GetIngredient
IoCファクトリへの静的参照なしなど、ビジネスルールハンドラをインスタンス化するためのより適切な方法はありますか?