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とDRINKはピザやドリンクの種類を表す列挙型です)。
ここで、チーズショップは注文されたチーズのグラムと種類からコストを計算します。
私はこの設計で継承を考えていました。ピザショップとチーズショップは、どちらもショッピングのお店で、何らかの方法でコストを計算する(注文方法がある)という点で類似しています。しかし、この方法は異なります。したがって、メソッド "order()"は、異なるショップごとに異なるパラメータを取ります。これは、一般的なショップを表すためにデザインにインターフェイスまたは抽象クラスを使用できないことを意味します。これを設計するエレガントな方法は何でしょうか?
ありがとうございます。それをやっての
あなたは、注文方法もIORDERオブジェクトのインタフェースに取るかもしれません。次に、それをorderメソッドの実装の中にキャストします。 –
'Product'sとその数量を含む' Order'クラスを使うことができます。あなたの関数は 'CalculateCost(Order)'になり、それは仮想である必要はありません。あなたはそれをベースの 'Shop'クラスに入れることができます。 –
これを確認してくださいhttps://sourcemaking.com/refactoring/smells/long-parameter-listとhttps://sourcemaking.com/refactoring/introduce-parameter-object – Terrance