You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET整洁架构项目中,gRPC的Proto文件与服务应置于哪层哪个目录?

在整洁架构的ASP.NET项目中放置gRPC Proto文件与服务的最佳实践

一、Proto 文件的层级与目录

整洁架构的核心原则是依赖向内,核心层(实体、用例)不依赖任何外部技术框架。Proto作为gRPC的服务契约,属于外部技术相关的接口描述,因此不能放在核心层。推荐两种落地方案:

方案1:独立契约类库(推荐)

  • 创建单独的类库项目,命名如 YourProject.Grpc.Contracts
  • 项目根目录下新建 Protos 文件夹,统一存放所有 .proto 文件
  • 该项目仅维护gRPC服务契约,不包含任何业务逻辑或实现代码
  • 优势:契约与实现完全解耦,内部或外部客户端只需引用此项目即可生成调用代码,严格遵循依赖倒置原则

方案2:接口适配器层内的契约目录

  • 若不想单独创建项目,可将 Protos 文件夹放在接口适配器层(如 YourProject.Adapters 项目)下的 Grpc 子目录中,示例路径:YourProject.Adapters/Grpc/Protos
  • 注意:接口适配器层可依赖核心层,但核心层绝对不能依赖它,因此契约仅用于描述对外暴露的接口,不能包含核心层内部细节

二、gRPC 服务实现的层级与目录

gRPC服务属于外部框架实现,必须放在整洁架构的最外层——框架与驱动层(通常是ASP.NET的Web宿主项目,如 YourProject.Web.Grpc)。

目录结构示例

  • 宿主项目根目录下创建 GrpcServices 文件夹,存放所有gRPC服务实现类
  • 每个服务对应独立子目录,比如 GrpcServices/UserService 下放置 UserGrpcService.cs(实现proto生成的服务接口)
  • 服务实现类的核心职责:
    • 接收gRPC请求,将请求模型转换为核心层的实体或用例输入模型
    • 通过依赖注入调用用例层的业务逻辑接口
    • 将用例执行结果转换为gRPC响应模型返回

三、依赖关系约束

  • 框架与驱动层(gRPC宿主项目)依赖接口适配器层和核心层:服务实现需要调用用例逻辑,同时需引用契约项目获取proto生成的接口
  • 接口适配器层可依赖核心层,但不能反向依赖框架与驱动层
  • 核心层(实体、用例)完全不依赖gRPC相关代码,保持业务逻辑的纯粹性

四、完整项目结构示例

YourSolution/
├── YourProject.Core/          # 核心层:实体、用例、业务端口
│   ├── Entities/
│   ├── UseCases/
│   └── Ports/
├── YourProject.Adapters/      # 接口适配器层:数据适配、模型转换
│   ├── Data/
│   └── Grpc/
│       └── Protos/            # 可选:不单独建契约项目时的存放位置
├── YourProject.Grpc.Contracts/# 独立契约项目(推荐)
│   └── Protos/
│       ├── user_service.proto
│       └── order_service.proto
└── YourProject.Web.Grpc/      # 框架与驱动层:gRPC服务宿主
    ├── GrpcServices/
    │   ├── UserGrpcService.cs
    │   └── OrderGrpcService.cs
    └── Program.cs

内容的提问来源于stack exchange,提问作者Regestea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:26:05