1
我正在C#购物中心建设一个购物商场的程序,购物中心里有几家商店。每个商店有不同的成本计算方法,例如,继承购物中心设计C#
一个比萨店只是计算成本从有序比萨饼和/或饮料的数量:
public class PizzaShop
{
public double order(int numberOfPizzas, PIZZA pizza, int numberOfDrinks, DRINK drink)
{
double costOfPizzas;
if (pizza == PIZZA.margarita)
{
costOfPizzas = 5;
}
else
{
costOfPizzas = 6;
}
// find drinks cost similarly and return the total:
return (costOfPizzas * numberOfPizzas) + (costOfDrinks * numberOfDrinks);
}
}
(这里PIZZA,喝是代表不同类型的比萨饼和饮料的枚举)。
如果奶酪店根据克数和奶酪类型计算成本。
所以,我在考虑在这个设计中继承。比萨店和奶酪店的相似之处在于他们都是购物商店,他们都以某种方式计算成本(有订单方法)。然而这种方式是不同的。因此,“order()”方法将为每个不同的商店采用不同的参数。这意味着我不能使用接口或抽象类来代表我的设计来表示一般商店。什么是设计这个优雅的方式?
谢谢。这样做的
你可以有顺序的方法也需要在IOrder对象的接口。然后将其转换为订单方法的实施。 –
您可以使用包含“产品”及其数量的“订单”类。然后你的函数变成'CalculateCost(Order)',它甚至不必是虚拟的 - 你可以把它放在基类'Shop'类中。 –
查看https://sourcemaking.com/refactoring/smells/long-parameter-list和https://sourcemaking.com/refactoring/introduce-parameter-object – Terrance