Skip to content

macdao/developer-code-pairing-csharp

Repository files navigation

DeveloperCodePairing 项目

这是一个基于 .NET 9.0 的订单管理系统,采用六边形架构(Hexagonal Architecture)设计。


🛠 技术部分

项目概览

项目类型 目标框架 架构模式 编程语言
ASP.NET Core Web API .NET 9.0 六边形架构 C# 12.0

分层架构与技术栈

Diagram

1. Configuration层 (DeveloperCodePairing.Configuration)

职责: 程序入口点,依赖注入配置,中间件配置

技术栈:

  • 依赖注入容器配置

2. API层 (DeveloperCodePairing.Api)

职责: 处理HTTP请求,响应控制

技术栈:

  • ASP.NET Core Controllers
  • 模型验证与错误处理
  • HTTP 适配器实现

3. 领域层 (DeveloperCodePairing.Domain)

职责: 核心业务逻辑,领域模型

技术栈:

  • 纯C#实现,无外部框架依赖
  • 领域驱动设计 (DDD)
  • 值对象模式
  • 实体模式

核心领域概念:

  • Order - 订单聚合根
  • OrderItem - 订单项
  • OrderId/OrderNumber - 订单标识值对象
  • DeliveryInfo - 配送信息
  • Pricing - 价格计算
  • OrderStatus - 订单状态枚举

4. 应用层 (DeveloperCodePairing.Application)

职责: 业务流程编排,用例实现

技术栈:

  • 应用服务模式
  • 端口适配器模式
  • Command/Query 模式
  • System.ComponentModel.DataAnnotations (验证)

核心组件:

  • CreateOrderService - 创建订单用例
  • GetOrderService - 查询订单用例
  • ISaveOrderPort/ILoadOrderPort - 端口接口
  • OrderNotFoundException - 业务异常

5. 基础设施层 (DeveloperCodePairing.Infrastructure)

职责: 外部依赖实现,技术服务

测试框架

单元测试 (DeveloperCodePairing.Tests.Unit)

  • 测试框架: MSTest 3.6.4
  • Mock框架: Moq 4.20.72
  • 断言库: FluentAssertions 7.0.0
  • 测试SDK: Microsoft.NET.Test.Sdk 17.12.0

集成测试 (DeveloperCodePairing.Tests.Integration)

  • 测试框架: MSTest + ASP.NET Core Test Framework
  • 测试工具: Microsoft.AspNetCore.Mvc.Testing

配置与运行时

特性配置

  • Nullable Reference Types (启用)
  • Implicit Usings (启用)
  • XML 文档注释
  • 现代C#记录类型 (record types)
  • 主构造函数 (primary constructors)

使用指南

快速开始

编译项目

# 恢复依赖包
dotnet restore

# 编译整个解决方案
dotnet build

运行自动化测试

运行所有测试:

# 运行所有测试项目
dotnet test

运行特定测试项目:

# 单元测试
dotnet test DeveloperCodePairing.Tests.Unit

# 集成测试
dotnet test DeveloperCodePairing.Tests.Integration

# 运行测试并收集代码覆盖率
dotnet test --collect:"XPlat Code Coverage"

启动服务

开发环境启动:

# 信任 HTTPS 开发证书
dotnet dev-certs https --trust

# 启动开发服务器
dotnet run --project DeveloperCodePairing.Configuration

# 或者使用热重载模式
dotnet watch run --project DeveloperCodePairing.Configuration

服务启动后可通过以下地址访问:

API 使用说明

认证说明

所有API端点都需要JWT Bearer认证。在请求头中添加:

Authorization: Bearer <your-jwt-token>

API 端点

1. 创建订单

端点: POST /api/v1/orders

请求示例:

curl -X POST "http://localhost:5000/api/v1/orders" \
  -H "Authorization: Bearer <your-jwt-token>" \
  -H "Content-Type: application/json" \
  -d '{
    "merchantId": "merchant-123",
    "items": [
      {
        "dishId": "dish-001",
        "dishName": "宫保鸡丁",
        "quantity": 2,
        "price": 28.50
      },
      {
        "dishId": "dish-002", 
        "dishName": "麻婆豆腐",
        "quantity": 1,
        "price": 18.00
      }
    ],
    "deliveryInfo": {
      "recipientName": "张三",
      "recipientPhone": "13812345678",
      "address": "北京市朝阳区某某街道123号"
    },
    "remark": "少辣,不要香菜"
  }'

响应示例:

{
  "code": 0,
  "message": "订单创建成功",
  "data": {
    "orderId": "order-uuid-123",
    "orderNumber": "ORD20241210001",
    "status": "Pending",
    "pricing": {
      "itemsTotal": 75.00,
      "packagingFee": 2.00,
      "deliveryFee": 5.00,
      "finalAmount": 82.00
    },
    "createdAt": "2024-12-10T14:30:00Z"
  }
}
2. 获取订单详情

端点: GET /api/v1/orders/{orderId}

请求示例:

curl -X GET "http://localhost:5000/api/v1/orders/order-uuid-123" \
  -H "Authorization: Bearer <your-jwt-token>"

响应示例:

{
  "code": 0,
  "message": "订单获取成功",
  "data": {
    "orderId": "order-uuid-123",
    "orderNumber": "ORD20241210001",
    "userId": "user-456",
    "merchantId": "merchant-123",
    "items": [
      {
        "dishId": "dish-001",
        "dishName": "宫保鸡丁",
        "quantity": 2,
        "price": 28.50
      },
      {
        "dishId": "dish-002",
        "dishName": "麻婆豆腐", 
        "quantity": 1,
        "price": 18.00
      }
    ],
    "deliveryInfo": {
      "recipientName": "张三",
      "recipientPhone": "13812345678",
      "address": "北京市朝阳区某某街道123号"
    },
    "remark": "少辣,不要香菜",
    "status": "Pending",
    "pricing": {
      "itemsTotal": 75.00,
      "packagingFee": 2.00,
      "deliveryFee": 5.00,
      "finalAmount": 82.00
    },
    "createdAt": "2024-12-10T14:30:00Z"
  }
}

错误响应格式

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "Bad Request",
  "status": 400,
  "detail": "请求参数验证失败",
  "errors": {
    "MerchantId": ["商家ID不能为空"],
    "Items": ["订单至少包含一个餐品"]
  }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages