2010-08-25 29 views
1

一個簡單的LINQ to SQL查詢可能返回一個產品對象。有意義的是,我可以將這個對象傳遞給我的業務層,然後直接讀取並更新數據。在哪些情況下,我想創建從Linq到Sql結果的自定義業務對象?

我見過一堆實現,其中執行linq查詢後,生成的對象被映射(通過automapper或手動)到自定義業務對象。所以,在我可能有LINQ對象產品的情況下:

product.ProductId 和 Product.ProductName

,然後我會定義一個定製產品業務對象,像這樣:

class BusineszProduct 
{ 
    string ProductId; 
    string ProductName; 
} 

和一些簡單的映射代碼,如:

BusinessProduct myProduct = new BusinessProduct(); myProduct.ProductId = product.ProductId; myProduct.ProductName = product.ProductName;

然後將myProduct傳遞給我的業務層,修改它,讀取它等等,然後更新linq對象。

在什麼情況下我想創建自定義BusinessProduct類?

回答

2

恕我直言,一般的原因是將Linq2SQL實體附帶的Linq2SQL ORM行李中的商業實體分開/解開

然而,在極端情況下,可能有多個映射:

  • LINQ2SQL實體的「數據訪問」層 - 但是,這些是緊耦合到L2S的DataContext
  • 波蘇斯/業務實體會用於業務規則應用程序驗證等
  • 如果您使用的是Web服務或WCF,那麼您也可以將數據表示爲消息實體,例如如果您需要提供實體在一個非常特定的格式,當他們跨線連載
  • 最後,如果你有一個MVC/MVP/MVVM的UI架構,你可能要爲你的意見量身定製實體
+0

第1部分 - 很好的答案。子句1 - 即使是Linq to Sql也能完全感覺b/c如果我使用存儲庫模式,但是如果我創建了另一個圖層,這個對象映射,我可以更容易地將我的數據存儲更改爲一個nosql數據庫。#2 - Linq和MVC好像有很多本機驗證支持,所以我不確定這個註冊是否有w/me。 – Emilio 2010-08-25 22:46:35

+0

第2部分#3 - 爲什麼我可能希望通過導線與使用Linq對象的特定格式來表示數據?#4 - 使總體感覺。我讀過你應該有1: 1視圖與支持該視圖的模型之間的映射,因此在將模型數據從控制器傳遞到視圖之前進行映射是有意義的。另一個替代方法是爲每個視圖創建一個Linq查詢。我的意見是有道理的? – Emilio 2010-08-25 22:47:44

+0

當然 - 這是一個極端的例子 第2點 - 模擬點,但是在N層SOA堆棧中,使用DI等組件引用您的DAL似乎是不對的。 第3點 - 如果您已承諾向消費者發佈特定的XSD/WSDL合約,那麼您確實需要對xmnls,元素vs屬性,名稱等進行良好的級別控制。但是,如果消費者在您自己的控制之下,通常不需要這樣做(例如,您自己的客戶端/ Ajax或類似) – StuartLC 2010-08-26 07:19:27

0

在我的應用程序中,我執行了一個連接六個不同表的Linq查詢,並提供了來自每個表的幾列。沒有與該組信息匹配的特定於表格的對象類型。因此,我創建了一個自定義業務類來處理記錄集。

您可以自己查看它(http://www.njtheater.org

我從Productions表按日期選擇。它加入到播放表(我得到標題&說明),Troupes表(我得到劇院公司名稱),Venues表(我得到劇院名稱&城市)。 Plays表加入到PlayCredits表中,該表加入People表(我從中獲得劇作家的姓名)

+0

你說,「沒有與該組信息匹配的特定於表的對象類型,因此我創建了一個自定義業務類來處理記錄集。「你的意思是你創建了一個像我上面的BusinessProduct類一樣的自定義對象,或者你的Linq結果實際上是一個自定義業務類? – Emilio 2010-08-25 22:54:24

+0

我爲此目的創建了一個特定的類,很大程度上是因爲我需要做一些後處理它在顯示信息之前,並且匿名類中的屬性是隻讀的。 – 2010-08-26 11:02:57