asp.net-core - 使用 GraphQL API 的清洁架构 CQRS

标签 asp.net-core graphql cqrs mediatr hotchocolate

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

上个月关门。




Improve this question




我正在使用 API 服务器(ASP.NET Core)。
为了防止将来出现意大利面条式代码和其他讨厌的东西,我按照 Clean Architecture/CQRS(使用 MediatR)设计了系统。
我正在考虑将 GraphQL 用于 API 而不是 REST(热巧克力 GraphQL)。
在 HotChocolate GraphQL 的几个示例中,使用 GraphQL-EF 机制直接查询数据库。虽然这看起来很有好处,但我担心从长远来看这可能会使代码复杂化。数据库结构可能会发生变化等。在我看来,API 应该与存储库层保持分离。
即使做更多的工作,我相信 GraphQL 应该改为与 CQRS 通信。

最佳答案

尽管不是一个封闭式回答“是或否”的问题,但我同意你的看法。我怀疑这些例子中的大多数可能只是为了演示。如果不分离合约、业务逻辑和数据层,似乎很难确保 SOLID 原则。
像您一样使用 CQRS 和 MediatR,您可以更轻松地执行 DDD。因此,命令/查询位于应用程序层似乎很自然,而存储库的实现可以转到基础架构。另一方面,API 合约将进入表示层。
事实上,我们可以根据我们的业务需求,在应用层中自始至终开发几个功能。这些功能可能会提供不同的演示模块,或者以不同方式公开的 API、UI 应用程序等。另一方面,这些功能可以依赖于各种基础设施数据存储库或外部源,例如。
Microsoft 提供了关于常见 Web 架构的很好的分析 here , 专注于清洁架构 here .
最后,在我看来,是的,您可以在 Presentation 中设置 GraphQL API,在应用层中使用 CQRS 设计并使用 MediatR 编排的业务逻辑,以及在基础架构中实现的数据存储库(尊重在应用)。

关于asp.net-core - 使用 GraphQL API 的清洁架构 CQRS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63179486/

相关文章:

java - GraphQL-SPQR 中返回错误的正确方法

javascript - Apollo-server 2 验证中间件

cqrs - 使用 RDBMS 作为事件源存储

CQRS:通过命令而不是事件启动进程管理器

domain-driven-design - Lightbend 响应式(Reactive)架构认证

asp.net-core - 如何在 ASP.NET Core 中添加自定义 ValueProvider

asp.net-core - 如何使用 SkiaSharp 查找解码位图的 PixelFormat

java - 如何通过Java中的构建模式创建GraphQL查询字符串?

.net - 解决错误 "Microsoft.NETCore.App 1.0.0 does not support framework .NETFramework,Version=v4.6.1"

asp.net-core - 在带有 dotnet 包任务的项目中使用 dotnet run 时未创建包