2010-02-19 70 views
5

我正在寫一個ASP.NET應用程序,我有一個UI層,業務邏輯層和數據訪問層。在我的數據層中,我將業務對象返回到業務邏輯層,並將這些業務對象傳遞給UI層。但是,我不確定當我想從UI層執行保存/插入數據時該怎麼做。我應該從UI層返回到業務層?

我應該在UI層創建業務對象,並傳遞給業務層或者我應該在業務層來創建它?

千恩萬謝

+0

謝謝大家的意見 - 非常感謝 – Nick 2010-02-26 09:46:44

回答

2

我同意crunchdog--除了最瑣碎的Web應用程序之外,您應該爲您的UI /視圖層專門設計一個扁平形式的業務對象。有時候這被稱爲View Model類,通常只包含幾個字符串屬性,UI層可以直接從中獲取並放入,而不用擔心驗證。 (見asp.net mvc

原因之一,它可以使這個UI層清晰,更簡單,離開它把它的朝向顯示數據,而不是遍歷對象結構,檢查和解釋空力度等

這也使業務層有機會對這些字符串值進行驗證,如果輸入的值無效,則返回值。例如,當您的服務器必須處理日期字段中的無效日期時,這可以節省編碼沮喪。識別無效值的業務層可以按照收到的正確的錯誤消息返回它們。如果你所處理的都是業務/域對象,那麼輸入的某些值可能並不總是適合用來保存它們的對象。

它也可以幫助有指定映射值來回業務/域對象和UI對象/視圖模型之間的一類。這有助於保持業務層關注的清晰分離。

0

我覺得最好有一個「真正的」業務對象建模UI層對象。這些模型對象不需要擁有「真實」業務對象所具有的所有信息(關聯和類似信息)。然後業務層必須負責從業務對象轉換到業務對象。

對於網絡應用程序來說,這非常方便,因爲您不需要將過多的數據來回發送到客戶端。

+0

Crunchdog正在談論數據傳輸對象或DTO的簡稱:http://en.wikipedia.org/wiki/Data_transfer_object。 – Steven 2010-02-19 09:17:28

0

如果您不想過度編寫業務對象,那麼您在檢索數據方面做了正確的事情(從DAL到BL的相同業務對象返回到UI)。

在保存數據時,您可以將這些對象作爲參數傳遞給BL和\或DAL層。如果將當前對象綁定到UI控件上,或者創建該對象的新實例並設置更改,則可以將當前對象傳回。

然後在您的DAL層讀取對象並將更改保存回數據庫。

0

我發現最簡單的解決方案是將視圖模型對象從UI傳遞到業務層,原因有幾個。最明顯的是驗證應該發生在業務層,因此在UI中創建業務對象打破了MVC的原則。

更重要的是,如果用戶輸入無效數據,業務對象可能(正確)不能接受該數據。但是,您不希望丟棄用戶輸入的數據,因此無驗證的View Model對象爲您提供了一種存儲和傳遞用戶輸入的數據的方法,無論它是否有效。