2011-02-04 66 views
2

使用PHP設計可以儘可能輕鬆添加的模塊化系統的最佳方法是什麼?例如,如果您有購物車,則可能有一個支付基類,其中包含所有必需的方法。然後你可以有一個Paypal類來擴展這個類,一個Visa/Mastercard也可以擴展基類,但是你怎樣才能真正把它們投入使用?PHP:模塊化支付系統的最佳設計?

如果您製作了購物車的功能版本,則可以創建一個名爲doExecute的功能並傳遞所需的信息。然後您將所有文件命名爲Payment_Method.php。然後讀取文件名稱,創建可接受的付款方式列表。一旦選擇了一個,該文件是該腳本中包含的唯一一個文件,然後調用doExecute方法來確保在支付方法include文件中的方法是所調用的方法。

但是,對於一個面向對象的方法,這確實能很好地工作。如何添加其他方法而不必修改代碼以包含新類的對象?

回答

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 
} 

因爲所有的廠商有不同的數據提交結構。你的基類應該有一個函數來「加載」數據。這把它放在你的標準格式中。然後,每個支付類將具有「地圖」功能,以將您的結構映射到其結構。例如,將日期分成不同的年份,月份,日期字段。

然後您有一個「提交」功能將數據提交給處理供應商。然後使用「解析響應」功能解析響應並將其放入您想出的標準化響應數據結構中。

爲簡單起見,您可以使用一種方法調用所有三個函數(map-> submit-> map。但是爲了測試,更容易將它們分開。 $ processor-> submit(); $ response = $ processor-> parseResponse();

當然,這並不真正適用於PayPal。貝寶是異步的,你發送用戶到他們的網站。然後Paypal在完成處理後將它們發送回您的網站。 Google checkout也是一樣。

0

我會做這種方式:

使用一個基類所有的支付系統(如你所提到的)

各支付系統(如貝寶)擴展了支付類,你可以加載所有的PHP文件..只是確保他們都有一個名稱對應的文件,反之亦然..

然後當選擇付款選項,而不是加載單個文件,您可以創建該實例的對象..並總是調用該對象相同的名稱,如$ activePaymentGateway或類似的東西。

然後,當您調用$ activePaymentGateway-> processPayment(500,'EUR'); (或者 - > doExecute()就像你的例子那樣),或者其他什麼,相應的類應該知道那裏發生了什麼。

每班不應實際定義,除了需要從基類繼承的任何一個公共職能

我希望它能幫助