我们应该在哪里进行过滤——数据层还是服务层以优化可测试性和效率?

问题描述 投票:0回答:1

我们在 EF 中使用 LINQ 来过滤数据(以优化查询)。然而,在测试我们的服务时,我们无法测试查询 - 那么我们是否应该在服务层也进行过滤?

design-patterns query-optimization service-layer data-layers testability
1个回答
0
投票

如果您的数据层将获取的集合公开为

List<T>
,则意味着它会具体化内存中的所有数据。当您在服务层内应用过滤时,这意味着您执行客户端过滤,这远非最佳。除非您想多次重复使用数据层中的相同数据集合。

因此,如果您想优化查询速度,请在数据层内执行过滤逻辑。从测试的角度来看,如果您想对数据层功能执行单元测试,那么您可以使用实体框架模拟库。有些与 Moq 配合使用效果更好,有些则与 NSubstitute 配合使用效果更好。

对于集成测试,您可以使用 EF 的内存数据库提供程序,但请记住,它在许多情况下的行为与真实数据库不同。请阅读以下有关 EF 测试的文章

© www.soinside.com 2019 - 2024. All rights reserved.