2011-02-04 2 views
2

PHPを使用してできるだけ簡単に追加できるモジュラーシステムを設計する最良の方法は何ですか?たとえば、ショッピングカートがある場合は、必要なすべてのメソッドを備えた支払い基本クラスがあるとします。その後、そのクラスを拡張するPaypalクラスと、基本クラスを拡張するVisa/Mastercardを持つことができますが、それらを実際にどのように使用しますか?PHP:モジュール式決済システムに最適なデザインですか?

機能的なバージョンのカートを作成した場合は、doExecuteという機能を作成し、必要な情報を渡すことができます。次に、すべてのファイルの名前をPayment_Method.phpとします。ファイル名が読み取られ、受け入れ可能な支払方法のリストが作成されます。一度選択すると、そのファイルはスクリプトに含まれている唯一のファイルであり、doExecuteメソッドが呼び出され、支払方法インクルードファイルのメソッドが呼び出されたものであることが保証されます。

しかし、オブジェクト指向のアプローチでは、実際にはうまくいきます。新しいクラスのオブジェクトをインクルードするようにコードを変更せずに、追加メソッドをどのように追加しますか?

私はそれをこのように行うだろう

答えて

0

方法があるのに役立ちます願っています前述したように基本クラスを持つことはできますが、基本クラスは基本クラスを拡張する必要な支払いベンダーをインスタンス化します。すべてのベンダーが異なるデータ提出の構造を持っているので、次に、基本クラスは

public function loadVendor($vendorName) { 
    static $validVendors = array('credit_card','paypal'); 
    if (!in_array($vendorName, $validVendors) { 
     return false; 
    } 
    include('/path/to//vendors/'.$vendorName.'.php'); 
    $processor = new $vendorName(); 
    //additional default setup 
    return $processor 
} 

等、ログ記録、管理を一元化、ロードされるどのようなファイルを制御しています。基本クラスには、データを「読み込む」機能が必要です。これはあなたの標準フォーマットになります。それぞれの支払いクラスは、構造を構造にマップする「マップ」機能を持っています。たとえば、日付を別々の年、月、日のフィールドに分割します。

次に、データを処理ベンダーに送信するための「送信」機能があります。次に、レスポンスを解析し、それを標準化したレスポンスデータ構造に入れるための「解析応答」関数を使用します。

簡単にするために、3つの関数(map-> submit-> map)をすべて呼び出すメソッドを1つ用意することができますが、テストする場合は別々にする方が簡単です。 $ response = $ processor-> parseResponse();

もちろん、これはPaypalでは実際には機能しません。Paypalは非同期で、あなたは自分のサイトにユーザーを送ります。 Paypalは処理を終えた後、あなたのサイトに送り返します。 Googleのチェックアウトも同じ方法です。

0

(あなたが言及したように)各決済システム(例えばペイパル)は、すべての決済システムのための

を基本クラスを使用しますが、支払いクラスを拡張して、あなたはすべてロードすることができますphp files ..ちょうどそれらがすべてファイルに対応する名前を持っていることを確認してください。逆の場合も同様です。

そして、支払いオプションが選択されると、1つのファイルを読み込むのではなく、そのインスタンスのオブジェクトを作成できます。 $ activePaymentGatewayなどのように、常にそのオブジェクトを同じ名前で呼んでください。

次に、$ activePaymentGateway-> processPayment(500、 'EUR')を呼び出します。 (またはあなたの例のように - > doExecute())、何でも、対応するクラスはそこで何が起こるか知っているはずです。

各クラスは、実際に基本クラスから

を継承する必要が1以外の任意のパブリック関数を定義すべきではない、私はそれが私はこのような決済システムを実装しました

関連する問題