gRPC 和域驱动设计 - 在哪里放置原始文件(域层与其他地方)?

Hel*_*123 7 c# domain-driven-design

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

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

我可以选择三个选项:

  • 将proto文件放入core项目中,在core项目中添加必要的包进行编译
  • 将 proto 文件放在核心项目中,但在另一个项目中构建它们(即构建项目时,获取另一个项目中文件的相对引用并构建它们)
  • 利用包含所有这些原型文件的共享项目并在那里构建它们

我想知道正确的方法是什么。我可以看到所有人的优点和缺点,但想了解一些关于一种方法是否比其他方法更好的信息。

Vla*_*lad 3

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

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

关于域中的附加打包 - 您可以这样做,但您应该最小化它们。