1

使用 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>();
    }

我发现了这个类似的问题——>用 Linq To SQL 和 DTO 分离关注点

4

5 回答 5

4

就个人而言,我更喜欢数据传输对象,但数据集在紧要关头工作。

基本上,这个想法是,如果您正在使用数据传输对象(它没有逻辑,并且代表您希望在客户端上使用的模型),那么无论前面的更改如何,它都是可以继续存在的抽象或后端。这通常是个好主意。

DataSet 很有用,但由于基于数字/字符串的字段访问,它们缺乏编译时安全性(尽管在强类型 DataSet 的情况下并非如此)可能会造成问题。

通常,与数据传输对象相比,通过线路对数据集进行序列化也会产生大量开销。

于 2009-08-19T15:08:28.977 回答
1

由于 DataSet 的开销,我喜欢创建自己的模型类。如果您返回一个对象数组(或任何实现 IList 接口的对象),您仍然可以将其设置为等于大多数 ASP.NET 元素的 DataSource 属性。

于 2009-08-19T15:16:53.703 回答
1

我个人喜欢在使用链接时设置我的数据源List<YourObject>

于 2009-08-19T15:17:34.780 回答
1

我更喜欢业务逻辑返回对象的实例,例如 Car、ICar 或 List(Car) 让 DAL 为您填充对象。这样您就可以在数据和 UI 之间保持清晰的分离。

于 2009-08-19T15:21:08.050 回答
1

我喜欢使用 DataReader 而不是数据集,并且我将使用数据层中的迭代器块将 datareader 转换为IEnumerable<IDataRecord>. 从那里开始,我在业务层和数据层之间有一个额外的步骤,将 IEnumerable 转换为IEnumerable<MyBusinessObject>. 您也应该能够将其传递给表示层以进行数据绑定。

我喜欢这种方法,因为它在分离数据层和业务层方面做得更好:业务层不应该考虑数据集,数据层不应该需要知道如何构建业务对象。如果我认为这是一个单独的层级,我会得到两全其美。对数据或业务层的更改意味着我只需要更改构造我的业务对象的工厂代码。

于 2009-08-19T15:21:46.630 回答