gpt4 book ai didi

c# - 分离 Linq To SQL 和 DTO 的关注点

转载 作者:可可西里 更新时间:2023-11-01 08:47:03 26 4
gpt4 key购买 nike

我最近开始了一个新的 webforms 项目,并决定将业务类与任何 DBML 引用分开。我的业务层类改为访问离散的数据层方法,并返回 DTO 的集合。所以数据层可能会像下面这样投影 DTO:

(from c in dataContext.Customers
where c.Active == true
select new DTO.Customer
{
CustomerID = c.CustomerID,
Name = c.CustomerName,
...
}).ToList()

虽然构建 DTO 对象会增加工作量,但这感觉像是一种更好的方法来紧密绑定(bind)业务层和数据层,并且意味着我可以在不存在数据库的情况下测试业务层。

我的问题是,这是好的做法吗?是否有生成 DTO 的方法(可能通过 SQLMetal),以及随着项目的进展我可能会遇到哪些其他问题。

最佳答案

我不知道这是否是最佳实践,但我在不久前写过类似的代码,因为我也觉得我可以通过使用我自己的类而不是 LINQ 设计器生成的类来改进关注点分离在我的申请中。

您可能想考虑从数据访问方法中只返回 IQueryable 而不是 IList 。由于 IQueryable 继承自 IEnumerable ,您的应用程序的其余部分应该能够很好地处理它。您也可以在真正需要时将其转换为列表。

这样做的好处是您可以非常轻松地动态修改查询并最大限度地减少从 SQL Server 返回的数据量。

例如如果你的方法签名是IQueryable GetCustomers() 你可以通过调用 GetCustomers().Where(c => c.CustomerID == 101).Single();

在这个例子中,只有一条记录会从数据库中返回,而我想目前你的代码会返回所有客户,或者你需要编写单独的方法(因此非常重复的代码)来满足所有不同的事情你可能想过滤。

关于c# - 分离 Linq To SQL 和 DTO 的关注点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com