其他分享
首页 > 其他分享> > 如何将某些行为限制为特定类的实例的子集?

如何将某些行为限制为特定类的实例的子集?

作者:互联网

我正在为食谱应用程序开发域模型,并且遇到了问题.

该应用程序具有多个能够充当成分的实体,其中两个是:产品和食谱(配方可以是其他食谱中的成分).通常,我会将与成分相关的功能封装到这些实体每个都可以实现的接口中.问题在于,尽管所有“产品”实例都可以是成分,但“食谱”实例的子集却只能是成分.

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