2009-08-19 32 views
1

使用Windows窗體控件和LINQ時,您的Buisiness Layer如何返回數據的「最佳選項」?Windows窗體控件和LINQ;我應該返回什麼?

現在我正在返回DataTables,以便可以將DataSource設置爲返回的DataTable。有更好的選擇嗎?爲什麼?

public class BLLMatrix 
{ 
    public static DataTable GetMaintItems(int iCat) 
    { 
     IQueryable<tblCaseNotesMaintItem> tItems = DALMatrix.GetCNTable(); 
     return 
      (tItems.Where(item => item.CategoryID == iCat & item.IsActive).OrderBy(item => item.OrderID).Select(
       item => new { item.ItemID, item.ItemDescription })).CopyLinqToDataTable(); 
    } 

internal static class DALMatrix 
{ 
    internal static MatrixDataContext MatrixDataContext = new MatrixDataContext(); 

    internal static Table<tblCaseNotesMaintItem> GetCNTable() 
    { 
     return MatrixDataContext.GetTable<tblCaseNotesMaintItem>(); 
    } 

我發現這個類似的問題 - >Separating concerns with Linq To SQL and DTO's

回答

4

就個人而言,我更喜歡數據傳輸對象,但數據集在緊要關頭。基本上,這個想法是,如果你正在使用數據傳輸對象(它沒有邏輯,並且代表了你希望在客戶端上使用的模型),那是一個可以生活的抽象,不管前端或後端的變化。這通常是一個好主意。

數據集很有用,但由於基於數字/字符串的字段訪問,它們缺乏編譯時安全性(不是強類型的DataSet),這可能會造成問題。

通常,與數據傳輸對象相比,通過導線序列化數據集還有大量開銷。

+0

當你說包含DataTables的DataSet時,正確嗎?另外,你有沒有DTO的好例子?我會谷歌,但如果你有一個好的,我更喜歡推薦... – 2009-08-19 15:29:49

+1

@Refracted聖騎士:維基百科有一個很好的條目在數據傳輸對象在這裏:http://en.wikipedia.org/wiki/Data_transfer_object有一個很好的文章於2009年8月發佈的MSDN標題「數據傳輸對象的優點和缺點」,位於:http://msdn.microsoft.com/zh-cn/magazine/ee236638.aspx – casperOne 2009-08-19 15:35:32

1

由於DataSets的開銷,我喜歡創建自己的模型類。如果你返回一個對象數組(或者任何實現了IList接口的東西),你仍然可以設置它等於大多數ASP.NET元素的DataSource屬性。

+0

*「大多數ASP.NET元素。 「* ....是否適用於WinForm控件? – 2009-08-19 15:26:56

+0

WinForm元素應該也能夠使用IList的對象。 – CSharpAtl 2009-08-19 15:32:15

+0

謝謝,我會研究它。 – 2009-08-19 15:41:16

1

我個人比較喜歡使用鏈接List<YourObject>

1

我喜歡的業務邏輯返回一個對象的實例,如汽車,ICAR或列表(CAR)時設置我的數據源讓DAL填充對象您。這樣你就可以在數據和用戶界面之間保持清晰的分離。

1

我喜歡使用DataReaders而不是數據集,我將使用數據層中的迭代器塊將數據讀取器轉換爲IEnumerable<IDataRecord>。從那裏開始,我在業務層和數據層之間進行了一些額外的步驟,將IEnumerable轉換爲IEnumerable<MyBusinessObject>。您應該可以將其傳遞到表示層以進行數據綁定。

我喜歡這種方法,因爲它在分離數據層和業務層方面做得更好:業務層不應該考慮數據集,數據層也不應該知道如何構建業務對象。如果我認爲這是一個單獨的層次,我可以獲得兩全其美的好處。對數據層或業務層的更改意味着我只需要爲該構造改變我的業務對象的工廠代碼。

相關問題