我应该在哪里放置与DDD体系结构中按角色用户过滤数据有关的查询逻辑

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

我正在为我的应用程序遵循DDD架构。我有App层,域层和数据访问层(存储库)。假设我在我的应用中将拥有3个角色:管理员,主管,代理。每个角色都应访问为其分配的数据。所以问题是,我应该放置查询逻辑以便按存储库中的角色过滤数据,例如

var query = dataContext.Order.Where(...);
if(userRole = "admin")
query =.... filter by admin
If(usrRole = "supervisor")
query =.... 
return query.ToList();

我认为该逻​​辑与业务逻辑有关,应该放在域层中。但是我还没有弄清楚这一点。你们能帮我清理一下吗?

c# architecture domain-driven-design user-roles repository-design
1个回答
0
投票

到目前为止,我阅读的最好的解释是Wrox发表的领域驱动设计的模式,原理和实践中的解释。下图类似于核心思想。

onion arch

所有依赖项都向内指向,因此域模型不依赖其他任何东西,并且不知道其他任何东西。其中纯净,并且可以专注于重要的领域语言。

应用程序层(包含应用程序服务)公开了用例的API,并使用所涉及的域服务来协调请求。因此,应用程序服务中的代码是过程性的,而域模型中的代码通常要丰富得多。也就是说,如果域足够复杂以至于无法保证。

但是我要回答您的问题,应用程序层公开了基础结构要实现的接口(例如,存储库模式)。它也是应用程序层,它知道如何查询数据(通过使用此接口),并根据角色对其进行过滤。

领域模型应该只接收经过过滤的集合,然后仅关注一件事情处理数据。

为了完整起见,DDD允许许多体系结构,只要该域没有依赖性。尽管我觉得最容易掌握,但还是这样想。

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