如何将某些行为限制为特定类的实例的子集?
作者:互联网
我正在为食谱应用程序开发域模型,并且遇到了问题.
该应用程序具有多个能够充当成分的实体,其中两个是:产品和食谱(配方可以是其他食谱中的成分).通常,我会将与成分相关的功能封装到这些实体每个都可以实现的接口中.问题在于,尽管所有“产品”实例都可以是成分,但“食谱”实例的子集却只能是成分.
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实例应能够作为成分的要求?
解决方法:
如果它在您的类树中有效,则可以使用另一种选择,为这两种类型的食谱具有单独的类.请注意,如果要使用更多属性来区分对象,则此方法效果不佳.
class Recipe {
public IEnumerable<IIngredient> Ingredients { get; set; }
}
class UsefulRecipe : Recipe, IIngredient
{
void DoIngredientStuff()
{
// not all Recipes are ingredients - this might be an illegal call
}
}
标签:domain-driven-design,data-modeling,c 来源: https://codeday.me/bug/20191101/1983384.html