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