首页 > 解决方案 > gRPC 和域驱动设计 - 在哪里放置 proto 文件(域层与其他地方)?

问题描述

我在使用 gRPC 时遇到了正确架构的问题。在传统的 DDD 方法中,核心项目(即最内层/领域层)没有对外部层的引用,仅包含实体/聚合/接口/值对象等。这些的实际实现可能在不同的层(基础设施/应用程序/等)中进行

使用 gRPC,合约(即接口)是在 proto 文件级别定义的。但是这些原始文件必须编译为服务器/客户端才能工作。从我对 DDD 的介绍中,核心层实际上不应该有包引用(例如,在 .Net 核心中,我正在为我的核心域项目使用 .Netstandard 2.1 项目——它没有外部 nuget 包引用并且保持干净)。在正常情况下,您可以为标记接口等构建特定于域层的接口,以避免外部依赖项污染域层。但是对于 proto 文件,这是不可能的。

我可以选择三个选项:

我想知道正确的方法是什么。我可以看到所有人的利弊,但想要一些关于一种方法是否比其他方法更好的信息。

标签: c#domain-driven-design

解决方案


您不应该将 proto 文件放入域中。域必须仅包含业务逻辑而不包含其他内容。

如果我们谈论层 - 原始文件首先是对您的通信的描述。换句话说,表示层(API)是他们的好地方。

关于域中打包的附加内容 - 您可以执行此操作,但应将它们最小化。


推荐阅读