我正在研究配方应用程序的域模型并遇到问题。
该应用程序具有多个能够充当成分的实体,其中两个是:Product
和Recipe
(配方可以是其他配方中的成分)。通常,我会将与成分相关的功能封装到每个实体都可以实现的接口中。问题是,虽然所有 Product 实例都可以是成分,但只有一部分 Recipe 实例可以是成分。
interface IIngredient
{
void DoIngredientStuff();
}
class Product : IIngredient
{
void DoIngredientStuff()
{
// all Products are ingredients - do ingredient stuff at will
}
}
class Recipe : IIngredient
{
public IEnumerable<IIngredient> Ingredients { get; set; }
void DoIngredientStuff()
{
// not all Recipes are ingredients - this might be an illegal call
}
}
我如何重构这个模型来支持只有一些Recipe 实例才能充当成分的要求?