レシピアプリケーションのドメインモデルに取り組んでいて、問題が発生しています。
アプリケーションには、材料として機能できる複数のエンティティがあり、そのうちの2つは次のとおりです。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
}
}
一部のレシピインスタンスのみが材料として機能できる必要があるという要件をサポートするために、このモデルを再構築するにはどうすればよいですか?