gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:36:24 24 4
gpt4 key购买 nike

我在使用 gRPC 时遇到了正确架构的问题。在传统的 DDD 方法中,核心项目(即最内层/领域层)没有对外部层的引用,仅包含实体/聚合/接口(interface)/值对象等。这些的实际实现可能在不同的层(基础设施/应用程序/等)中进行
使用 gRPC,合约(即接口(interface))是在 proto 文件级别定义的。但是这些原始文件必须编译为服务器/客户端才能工作。从我对 DDD 的介绍中,核心层实际上不应该有包引用(例如,在 .Net 核心中,我正在为我的核心域项目使用 .Netstandard 2.1 项目 - 它没有外部 nuget 包引用并且保持干净)。在正常情况下,您可以为标记接口(interface)等构建特定于域层的接口(interface),以避免外部依赖项污染域层。但是对于 proto 文件,这是不可能的。
我可以选择三个选项:

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

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

    最佳答案

    您不应该将 proto 文件放入域中。
    域必须仅包含业务逻辑而不包含其他内容。
    如果我们谈论层 - 原始文件首先是对您的通信的描述。换句话说,表示层(API)是他们的好地方。
    关于域中打包的附加信息 - 您可以执行此操作,但应将它们最小化。

    关于c# - gRPC 和域驱动设计 - 在哪里放置 proto 文件(域层与其他地方)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62563785/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com