2011-04-06 56 views
0
This is my interface 

    public partial interface IPaymentMethod 
    { 
     void ProcessPayment(PaymentInfo paymentInfo, Customer customer, 
     Guid orderGuid, ref ProcessPaymentResult processPaymentResult); 
     void Capture(Order order, ref ProcessPaymentResult processPaymentResult); 
     void Refund(Order order, ref CancelPaymentResult cancelPaymentResult); 
    } 

我想實現PaypalPaymentProcessor.cs這個接口正確,AuthorizeNet.cs是下面的執行實現支付網關是應用服務

public class PayPalExpressPaymentProcessor : IPaymentMethod 
    { 
     public void ProcessPayment(PaymentInfo paymentInfo, Customer customer, Guid orderGuid, ref ProcessPaymentResult processPaymentResult) 
     { 
     //Some code 
     } 
     void Capture(Order order, ref ProcessPaymentResult processPaymentResult) 
     { 
     // Some Code 
     } 
     void Refund(Order order, ref CancelPaymentResult cancelPaymentResult) 
     { 
     // Some Code 
     } 
    } 

//同爲AuthorizNetPaymentProcessor類。這兩個類都用於支付網關。但我很困惑,我把以上界面和類在應用程序服務。因爲這兩個類都不適合成爲域的一部分而不適用於域服務。

是否可以將它們放在應用程序服務,並創建從那裏,我會打電話給他們在應用服務PaymentService類。我可以做這些嗎?

回答

1

您的問題描述非常簡短,但我會盡力回答。你的問題是你想把你的網關/包裝類,使用支付Web服務,對嗎?

如果該場景是您希望在您的應用程序中使用的支付Web服務,並且在您的應用程序服務層中更具體。那麼這個方法應該是把你的支付webservice gateway/wrapper放在基礎設施層(在另一個assembly/project中),並使用depencey injection在構造函數中插入網關。我不確定PayPalExpressPaymentProcessor在哪裏出現。但我想那是與付款服務談判的門戶類。

因此,您可能在應用程序層中有一個CustomerService,它將在構造函數(Depency injection)中獲取IPaymentService(Gateway/wrapper)並調用IPaymentService.ProcessPayment(...)方法。該服務方法實際上在 基礎設施層實施。然後,您的應用程序服務CustomerService也可以通過ICustomerRepository調用域,該ICustomerRepository也是通過構造函數(DI)啓動的。

也許這不是你的問題嗎?希望我能幫助你...

+0

PayPalExpressPaymentProcessor,這個類通過調用PayPal的api函數與所需的參數進行對話,與AuthorizePaymentProcessor相同,它將與授權支付網關進行通信。但是我在想如何將這些類放在應用層中,並創建另一個類叫PaymentService,它將在這個類中調用函數。但是現在你已經說過它應該在INFRA層中。因此,如果我們想與外部系統進行交流,那麼包裝類應該位於底層,並從App服務層調用函數。我對嗎 ? – kamal 2011-04-08 10:18:05

+0

DO應用層只能包含服務類,而不是包裝類。我正在考慮將包裝類放在應用層的文件夾中,因爲我讀了很多應用層與外部系統交談的地方。 – kamal 2011-04-08 10:21:37

+0

看到我的第二個答案。無法創建評論。我不知道爲什麼... – 2011-04-08 11:25:35

1

嗯... 的意見似乎並不工作。 StackOverFlow需要在這裏處理他們的AJAX請求......

Kamal你在「應用層與外部服務對話」的聲明中是正確的。但是這個短語也意味着外部系統應該能夠使用與您的表示層相同的Application Service API。 應用程序服務使用者可以是ASP.NET Web客戶端,A iPhone應用程序,SAP或IFS等業務系統。 但我的意思是更多,所有基礎架構相關的依賴關係不應該在應用程序服務層中引用。併發症可能是,一段時間後,您的應用程序服務層會引用A GemBox Excel第三方組件,WCF,MSMQ客戶端等。這將在每次要切換第三方產品時更換應用程序層,更新許可證,升級到較新的版本版。在我看來,一個簡單的任務太大的維護。您還可以獲得以下優勢:您可以輕鬆地單元測試從應用程序到域的所有內容,然後模擬電子郵件,wcf,msmq服務。

,你應該在你的應用服務層是什麼接口和實現你的服務和接口的基礎設施服務(包裝/適配器/你的名字),它們在另一組裝/項目實施。那麼你只有在你的infra項目中的wcf參考。你聽懂了嗎?如果你喜歡,我可以發佈一些代碼示例....