1000+ Linq查询或数据库中的逻辑......哪个更糟?

Jos*_*son 3 c# performance domain-driven-design linq-to-sql

几天前我以一种更加冗长的方式问过这个问题,考虑到长度,我得不到答案的事实并不令人惊讶,所以我认为我会更加注重这一点.

我必须根据对特定客户的分配来决定显示用户的内容.域对象看起来像这个极其简化的示例:

public class Customer
{
    public string Name { get; set; }
    public IEnumerable<Users> AssignedUsers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在现实世界中,我还将评估他们是否具有权限(使用安全标志的按位比较)来查看此特定客户,即使他们没有直接分配给它.

我在这里试图坚持域驱动设计(DDD)原则.另外,我正在使用LINQ to SQL进行数据访问.在我的服务层,我提供请求客户列表的用户,现在大约有1000个项目,每月增长约2%.

如果我严格要求在我的服务层中保留逻辑,我将需要使用Linq来.Where评估AssignedUsers列表是否包含请求列表的用户.这将导致Customer系统枚举的每个查询级联.我没有做任何测试,但这似乎效率低下.

如果我捏造数据中的无逻辑,那么我可以简单地使用一种GetCustomersByUser()方法来执行一种EXISTSSQL查询并同时评估安全性.这肯定会更快,但现在我在谈论逻辑爬进数据库,这可能会在以后产生问题.

我敢肯定,这是人们在推出Linq时提出的一个常见问题...任何关于哪种方式更好的建议?Linq的多个查询的性能是否优于我的数据库中的逻辑?

Rob*_*ine 5

哪个更糟?取决于你问谁.

可能如果你问DDD超纯粹主义者,他们会说数据库中的逻辑更糟糕.

如果你问其他任何人,恕我直言,特别是你的最终用户,务实的开发人员以及为硬件和软件开发付费的人,他们可能会说性能受到的影响更大.

像许多其他设计方法一样,DDD有很多值得赞扬的地方,但是如果你教条地遵循它们以牺牲现实世界的考虑因素(如性能)来提出"纯粹"的设计,它们都会失败.

如果你真的是不必进行这种对数据的查询,则数据库几乎肯定在执行任务的更好.

或者,你在这里"错过了一招".你的设计,但DDD,实际上不对吗?

总体而言 - 适当使用您的工具.通过各种方式努力保持逻辑在服务层中完全分离,但是当逻辑正在进行数据库设计的大量工作时.

  • +1"如果你教条地跟随他们,他们都会倒下" (2认同)