2010-08-26 102 views
0

我是ASP.NET MVC的新手,我試圖爲使用Web服務作爲其數據源的中小型應用程序實現最佳實踐。該Web服務公開下面的方法來支持應用程序:MVC存儲庫模式/ Web服務SoC問題

  1. AuthenticateCustomer - 如果有效的電子郵件/密碼
  2. GETCUSTOMER返回客戶ID - 返回一個包含客戶信息
  3. 等序列化對象

我的問題是,所有這些服務返回成功(布爾)和消息(字符串)值取決於操作的結果。如果發生錯誤,該消息包含描述性信息。我不確定Web服務的調用是否屬於Repository層,但我認爲能夠通過Repository - > Service - > Controller層傳遞Success和Message值是非常重要的。我能想到這樣做的唯一方法是要麼棄置垃圾的輸出變量的存儲庫的方法:

public int AuthenticateCustomer(string Email, string Password, out bool Success, out bool Message); 

或建立某種形式的包裝,它包含了預期的返回值(整數),並且成功和消息值。但是,每個Web服務方法都會返回不同的值,因此一個通用包裝器將無法工作。另外,這些值需要通過服務層傳遞,並且似乎在存儲庫級別正在進行某種類型的驗證。

就如何完成任何想法: 1.分離的關注(驗證,通過Web服務的數據訪問),而... (二)具有保持從Web服務收到的反饋意見,並通過它通過所有的能力視圖的方式?

P.S. - 對於簡潔的問題抱歉。用任何簡短的方式解釋都有點困難。

回答

0

您是否需要知識庫?從你所描述的,我正在查看Web服務作爲存儲庫。然後,我將使用服務(業務層)來調用Web服務,並讓其中的邏輯處理錯誤或成功。

讓業務層將Customer對象從Web Service轉換爲Business對象,並將其傳遞給控制器​​。

庫(網絡服務) - >服務(業務層) - >表示層(控制器)

+0

Martin, 您的回答是有道理的。正如我想到的那樣,我的應用程序沒有「擁有」數據,也沒有責任將數據維護到持久性存儲(Web服務處理該數據),因此不需要顯式存儲庫。 感謝您的輸入。 – Ariel 2010-08-29 18:29:35

0

馬丁的回答是好。

我可能會看到圍繞Web服務的薄層情況以便於測試。

如果你走的路線和Success = false不是一個常見的條件,你可以拋出一個包含成功和消息的自己類型的異常。如果真的是一個特殊的情況,我只會這樣做。如果您發現您的業務層捕獲異常僅僅是爲了向表示層返回錯誤代碼,那麼這是一種錯誤的方法。

+0

Rob, 這是我在設計時遇到的問題。我能夠在服務層上執行一些驗證,但是在我的業務層中無法處理Web服務中內置的業務規則。例如,有一項服務允許客戶更改其登錄名(電子郵件)。 Web服務驗證新登錄尚未被其他客戶使用。這個反饋被服務層捕獲並呈現給用戶很重要。它「感覺」非常錯誤,但我正在努力想出一個更好的方法來處理它。 – Ariel 2010-08-29 18:33:52