2010-08-23 54 views
2

美好的一天。我必須將會話值傳遞給業務邏輯層,我可以將它傳遞給表示層中的函數,但是如何直接在業務邏輯層訪問它?另外它是一個很好的辦法,直接把它傳遞給業務邏輯層像如何在業務邏輯層內獲取會話值?

GetMyRecords(Count,Session["userID"].toString()); ? 

回答

3

按照John的上述回覆,您理想情況下不希望訪問業務層中的任何UI元素。 您應該將會話值從您的表示層傳遞到業​​務層,以便業務層只知道這些值 - 而不是它們來自哪裏。

至於關於如何傳遞表示層 中的值的第二點,我建議您至少應將Session [「userID」] .toString())作爲表示層中的屬性包裝。 由於其屬性,如果需要,您可以添加檢查/驗證邏輯。

此外,我發現它有一個包裝SessionWrapper類更清潔,並使用它在應用程序中訪問會話值。這樣做的好處是,如果您的會話持久性發生變化,通常會改變一個位置。當然,這是沒有必要的,因爲.NET會話提供程序可以通過配置插入,即使您創建自己的提供程序。

+0

謝謝在Sane。我在返回會話變量的業務邏輯層之外創建了一個存儲庫類。豎起大拇指 ! – 2010-08-23 05:02:47

2

我建議不要從業務邏輯層中訪問Session。分層的目的是爲了不同的目的。例如,業務邏輯層不應該(通常來說)包含對用戶界面技術的任何引用,例如,在這種情況下爲Session

從表示層(也稱爲UI層)到業務層期望的內容應該在表示層中完成。誰知道?也許下週你的老闆會要求你將業務邏輯從該Web服務器移到應用服務器上,並在它們之間使用基於WCF的通信。

即使你不知道明天的樣子,清晰的分隔也會爲明天留下更多(全部)路徑。

+0

謝謝約翰。你現在關注的是圖層分離。我如何通過存儲庫類訪問它? – 2010-08-23 04:28:36

+0

我想這可能更多的是你想從'Session'中獲得的信息。例如,如果您的會話有一個customerID,您可以在表示層中提取它,然後將其作爲參數傳遞給業務邏輯層。至於存儲庫類:我通常只將它用作業務邏輯層內的數據訪問層的接口。在這種情況下,存儲庫類將與表示層分開兩層。 – Manfred 2010-08-23 08:06:51