Windows窗体控件和LINQ;我应该怎么回报?
-
18-09-2019 - |
题
在使用Windows窗体控件的工作和LINQ是有一个“最好的选择”为您提供商家层如何将返回的数据?
现在我回来的数据表,这样我可以再设置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的要SQL和DTO的
解决方案
就个人而言,我更喜欢数据传输对象,但数据集在一个夹送工作。
基本上,这个想法是,如果使用的数据传输对象的工作(其不具有逻辑,并代表你正在寻找在客户机上一起工作的模型),也就是,可以住在不管变化的抽象在前端或后端。一般来说,这是一个好主意。
数据集是有用的,但他们缺乏编译时的安全性(不强类型数据集,虽然的情况下),因为数字/基于字符串的字段访问可能会带来问题。
典型地,也有大量开销中相比,数据传输对象串行化数据集上的导线。
其他提示
我喜欢创造,因为数据集的开销,我自己的模型类。如果返回(实现IList接口或任何)的对象阵列仍然可以设置等于最ASP.NET元素的数据源属性。
我个人喜欢设置我数据源使用的链接时List<YourObject>
我更喜欢的业务逻辑返回实例对象的,如汽车,ICAR或列表(汽车)让DAL填充物为您服务。这样你保持数据和UI之间的明确分离。
我喜欢用的DataReader而不是数据集,并且我将使用迭代器块在数据层以打开的DataReader成IEnumerable<IDataRecord>
。从那里,我有一种在业务和数据层之间的额外步骤来翻译这IEnumerable的到IEnumerable<MyBusinessObject>
。你应该能够通过这上表现层数据绑定以及
我喜欢这种方法,因为它做了更好的工作分开的数据和业务层:业务层不要以为在数据集方面,数据层不应该需要知道如何构建业务对象。如果我认为这是一个单独的层,我得到了两全其美。到数据或者业务层的变化意味着我只需要改变工厂代码为该构造我的业务对象。