我正在创建一个根据用户定义的设置处理数据的程序。在处理过程中,我有几个相关的列表必须根据这些用户自定义的设置进行迭代;用户决定迭代这些列表的顺序。
我想知道如何设计一种算法来迭代这些列表,同时仍然具有非常可维护的代码。这里的想法不是最终得到一个具有巨大 switch-case 的函数,其中每个 case 都对其中一个列表进行迭代。
示例:
假设我需要处理的数据是不同类型食物的列表。用户必须指定处理不同食物组的顺序。食物组只是存储杂项食物的列表:
List<string> grains = new List<string> { "Bread", "Pasta", "Cereal", "Rice" };
List<string> vegetables = new List<string> { "Corn", "Pea", "Carrot", "Tomato" };
List<string> fruits = new List<string> { "Apple", "Orange", "Banana", "Pear" };
List<string> meat = new List<string> { "Beef", "Chicken", "Pork", "Turkey" };
List<string> diary = new List<string> { "Milk", "Cheese", "Yogurt", "Cream" };
用户想要的顺序存储在另一个列表中。下面描述了一种可能的顺序:
List<string> order = new List<string>
{
"grains", //Grains processed first.
"vegetables",
"fruits",
"meat",
"diary" //Dairy processed last.
};
为了解释它是如何工作的,我将使用不需要的 switch-case:
foreach(string foodGroup in order)
{
switch(foodGroup)
{
case "grains":
foreach(string foodItem in grains)
{
ProcessFood(foodItem);
}
break;
case "vegetables":
foreach(string foodItem in vegetables)
{
ProcessFood(foodItem);
}
break;
case "fruits":
foreach(string foodItem in fruits)
{
ProcessFood(foodItem);
}
break;
case "meat":
foreach(string foodItem in meat)
{
ProcessFood(foodItem);
}
break;
case "diary":
foreach(string foodItem in diary)
{
ProcessFood(foodItem);
}
break;
}
}
在我的应用程序中,case 语句实际上将包含比示例中简单的 foreach 循环更多的代码。有没有更好的方法来设计这个算法?虽然没有必要,但我想知道是否还有一种可扩展的方式来设计这样的算法(添加/删除新的食物组不会破坏算法)。