# ECommerce **Repository Path**: ymjake/ecommerce ## Basic Information - **Project Name**: ECommerce - **Description**: 仿eShop的电子商务网站 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-17 - **Last Updated**: 2026-07-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ECommerce 这是一个基于 .NET Aspire 的微服务学习项目,参考 eShop 的业务流程,并结合 Wolverine 的消息编排、垂直切片和事件驱动思路。 项目目标不是堆满所有中间件,而是把电商核心链路跑通:登录、商品、购物车、下单、库存校验、模拟支付、订单状态流转。 ## 技术栈 * .NET / ASP.NET Core / Aspire * React / Vite / Mantine * YARP BFF / OpenIddict * WolverineFx / RabbitMQ * PostgreSQL / EF Core * Redis / FusionCache * gRPC ## 服务划分 当前 Aspire 会启动这些应用服务: * `Web.Bff`:前端 BFF,负责认证、YARP 反向代理、Basket 聚合和 Checkout。 * `Identity.Api`:认证授权服务,基于 OpenIddict。 * `Catalog.Api`:商品目录服务,提供商品、品牌、类型和商品维护接口。 * `Basket.Api`:购物车服务,对 BFF 暴露 gRPC 调用。 * `Ordering.Api`:订单服务,使用 Wolverine Saga 编排订单状态。 * `Inventory.Api`:库存服务,响应订单库存校验和扣减。 * `Payment.Worker`:模拟支付后台服务,目前没有真实支付页面。 * `Webhooks.Api`:Webhook 订阅与投递服务。 基础设施: * PostgreSQL * Redis * RabbitMQ 前端: * `shopping.web`:React 商城前端。 ## 已完成链路 * BFF 登录与 Token 传递。 * Catalog 商品列表、详情、品牌、类型接口。 * Catalog 商品新增、修改、删除接口。 * 商品图片通过 BFF 暴露,避免浏览器跨源资源策略问题。 * Basket 购物车读取、保存和商品聚合。 * Checkout 下单。 * Ordering Saga 状态流转。 * Inventory 库存确认或拒绝。 * Payment.Worker 模拟支付成功或失败。 * RabbitMQ 事件通信。 * Wolverine durable inbox/outbox。 * Catalog Redis + FusionCache 缓存。 ## 当前业务流程 下单链路: ```text shopping.web -> Web.Bff -> Ordering.Api -> Wolverine Saga -> Inventory.Api -> Payment.Worker -> Ordering.Api 更新订单状态 ``` ## 本地运行 启动后端: ```powershell dotnet run --project src\Aspire\AppHost\AppHost.csproj ``` 启动前端: ```powershell cd src\WebApps\shopping.web pnpm install pnpm dev ``` 常用验证: ```powershell dotnet build ECommerce.slnx cd src\WebApps\shopping.web pnpm typecheck ``` ## 架构约定 项目优先保持简单、可读、可调试: * 不做 API 版本化。 * 不使用 Docker Compose,本地使用 Aspire。 * 不为了分层而强行拆 `Application / Infrastructure / Presentation` 大块。 * 服务内部优先使用垂直切片组织代码。 * EF Core 直接作为数据访问入口,不额外包装通用 Repository。 * 不包装 Wolverine 的 `IMessageBus`。 * 跨服务复用接口放 `BuildingBlocks.CrossCutting`。 * 跨服务基础设施实现放 `BuildingBlocks.Infrastructure`。 * 商品查询优先走 `Catalog.Api` + Redis/FusionCache 的轻量方案。 ## 暂不做 * Docker Compose。 * API 版本化。 * 商品文件上传。 * GraphQL。 * 独立 Coupon 微服务。 ## 后续计划 短期优先清理和稳定现有代码: * 清理 Catalog 写接口和缓存失效代码。 * 优化前端搜索和筛选交互。 * 全链路测试登录、商品、购物车、下单、库存、支付模拟和订单状态。 * 下周末增加优惠券功能,优先放在 Basket / Ordering 链路里,不急着拆新服务。 * 后续接入支付宝沙盒或其他真实支付沙盒,替换当前 `Payment.Worker` 的 Mock 支付逻辑。