インターフェイスクラスの使用について明確に理解していません。インターフェイス クラス関連の OOP に関する多くの記事とチュートリアルを読んだので、インターフェイスが何であるかは知っていますが、実際のプロジェクトでの使用については理解しています。
例えば、
IPayment インターフェイス クラスを作成しました。そして、すべての支払いクラスの共通を使用する2つのメソッドを定義しました。
public interface IPayment
{
void MakePayment(OrderInfo orderInfo);
void MakeRefund (OrderInfo orderInfo);
}
CreditCardPayment、PaypalPayment、GooglePayment という 3 つの支払いクラスを作成しました。
各クラスに2つのメソッドを定義しました。
この部分で混乱しています。支払いまたは払い戻しの処理に使用する必要がある注文情報を含む OrderInfo クラスを作成する必要があります。また、各クラスには異なる情報が必要です。
CreditCartPayment クラスにはクレジットカード番号、有効期限が必要です ....しかし、他の支払いクラスは必要ありません。
GooglePayment クラスには Google Order Number が必要ですが、他のクラスには必要ありません。
したがって、最終的に OrderInfo クラスには多くの追加フィールドが必要です。しかも見た目が汚い…。
元)
Public class OrderInfo
{
/* For Common */
string orderNo {get; set;}
string customerNo { get; set;}
decimal amount {get; set;}
/* For Credit Card */
string CCNum {get; set;}
string expDate { get; set;}
/* For Google */
string googleOrderID {get; set;}
...
/* For Paypal */
...
}
私の質問は、
この場合、IPayment を使用するのは正しいですか? または、Interface クラスを使用せずに、各クラスを適切なパラメーターで定義する必要がありますか?
Interface クラスを使用する利点は、後で支払いクラスを簡単に把握できることだと思います。Interface クラスには、各支払いクラスで定義されているメソッドが表示されるためです。他の長所はありますか?
実世界で Interface クラスを理解するためのアドバイスはありますか?
[編集]
アドバイスありがとうございます。
サンプルコードをもう一度書きます。このコードを確認していただけますか?
public interface IPayment
{
void MakePayment(OrderInfo orderInfo); // !!
void MakeRefund (OrderInfo orderInfo); // !!
}
public class OrderInfo
{
protected string OrderNo {get; set;}
protected string CustomerNo { get; set;}
protected decimal Amount {get; set;}
}
public class CreditCardPaymentInfo : OrderInfo
{
string CCNum {get; set;}
string ExpDate { get; set;}
}
public class GooglePaymentInfo : OrderInfo
{
string GoogleOrderID {get; set;}
}
public class PaypalPaymentInfo : OrderInfo
{
string PaypalID {get; set;}
}
public void MakePayment()
{
IPayment paymentModule;
// Get Order Info
if(orderType == "Paypal"){
paymentModule = new PaypalPayment();
PaypalPaymentInfo orderInfo = new PaypalPaymentInfo();
orderInfo.PaypalID = "TEST";
}else if(orderType == "Google"){
paymentModule = new GooglePayment();
GooglePaymentInfo orderInfo = new GooglePaymentInfo();
orderInfo.GoogleOrderID = "TEST";
}else{
paymentModule = new CreditCardPayment();
CreditCardPaymentInfo orderInfo = new CreditCardPaymentInfo();
orderInfo.CCNum = "1111111111111111";
orderInfo.ExpDate = "11/11";
}
orderInfo.OrderNo = "123";
orderInfo.CustomerNo = "ABC";
orderInfo.Amount = 12.20m;
paymentModule.MakePayment();
}
エラーが発生します:
エラー 1 'com.WebUI.Models.CreditCardPaymentInfo' はインターフェイス メンバー 'com.WebUI.Models.IPaymentProcess.makeRefund(WebUI.Models.RefundModel)' を実装していません
Interface クラスを修正する必要があると思います。どのように修正すればよいか知っている人はいますか?