2012-05-24 46 views
4

我有一個關於ASP.NET MVP模式的問題。演示者是否可以知道會話值?如果我開始使用會話值,我不知道如何對會話進行模擬或測試,以及如果我使用相同的演示者進行Win表單的話。這是一個正確的方向,如果是的話,我在處理會話值時有什麼選擇。MVP模式和會話值

+0

您的問題讀到我的腦海裏。給予好評。 – granadaCoder

回答

3

演示者不應該知道Session對象(或來自System.Web的任何其他對象),但是如果通過視圖公開會話數據,它可以知道這些值。

隨着MVP,你有這樣的觀點:

public interface IViewCustomerView 
{ 
    ShoppingCartModel ShoppingCart {get;set} 
} 

在Web表單實現的觀點,我的購物來源於會話。

public partial class ViewCustomers : Page, IViewCustomerView 

ShoppingCartModel ShoppingCart 
{ 
    // add null/cast checks etc. here 
    get { return (ShoppingCartModel) Session["Cart"]; } 
    set { Session["Cart"] = value; } 
} 

在Web表單和mock實現它可能來自別的地方。然後在演示者中,當您訪問購物車時,它不知道它來自會話:

IViewCustomerView _view; 

_view.ShoppingCart... 
2

我對MVP位不太確定,但是你可以編寫一個像ISessionState這樣的接口,它可以設置/從某些東西獲取值。在你的網站上,這個會讀取/寫入真實的Session對象,但是在測試中,你會製作一個假裝使用會話的模擬對象。

一旦你提取了這個依賴關係,應該很容易將ISessionState實現注入到演示者或任何其他需要它的實現中。

+0

不錯的想法。請試試這個 – Greens