针对B2B2C系统的复杂性,我将为你设计一个兼顾扩展性和业务隔离的详细目录结构。这种架构需要同时支持平台运营、商家管理和消费者服务。
🏗️ B2B2C系统推荐目录结构

我建议采用 “多模块+子域分离” 的混合架构。这种结构既能保证技术一致性,又能实现业务隔离。

b2b2c-platform/                      # 平台父工程
├─ start/                            # 启动模块
├─ common/                           # 通用模块(平台级)
├─ gateway/                          # API网关(可选)
│
├─ core-modules/                     # 核心模块(所有子域共享)
│   ├─ user-center/                  # 用户中心
│   ├─ product-center/               # 商品中心
│   ├─ order-center/                 # 订单中心
│   └─ payment-center/               # 支付中心
│
├─ business-domains/                 # 业务域(按B2B2C角色分离)
│   ├─ platform-admin/               # 平台管理端
│   ├─ merchant-backend/             # 商家后台
│   └─ consumer-app/                 # 消费者端
│
└─ supporting-services/              # 支撑服务
    ├─ file-service/                 # 文件服务
    ├─ message-service/              # 消息服务
    └─ search-service/               # 搜索服务

📂 详细模块内部结构(以订单中心为例)

每个核心模块采用标准的COLA分层结构,但会考虑B2B2C的多租户特性:

order-center/
├─ src/main/java/com/b2b2c/order/
│   ├─ adapter/                           # 适配层(按协议分离)
│   │   ├─ web/
│   │   │   ├─ PlatformOrderController.java    # 平台管理API
│   │   │   ├─ MerchantOrderController.java    # 商家订单API
│   │   │   └─ ConsumerOrderController.java    # 消费者订单API
│   │   ├─ rpc/                           # 对内RPC接口(供其他服务调用)
│   │   └─ mq/                            # 消息监听(订单事件)
│   │
│   ├─ client/                           # 接口层(多角色API)
│   │   ├─ api/
│   │   │   ├─ PlatformOrderServiceI.java     # 平台端接口(全量数据)
│   │   │   ├─ MerchantOrderServiceI.java     # 商家端接口(仅本店数据)
│   │   │   └─ ConsumerOrderServiceI.java     # 消费者接口(个人订单)
│   │   └─ dto/
│   │       ├─ command/
│   │       │   ├─ PlatformOrderQueryCmd.java  # 平台复杂查询
│   │       │   ├─ MerchantOrderCreateCmd.java # 商家代客下单
│   │       │   └─ ConsumerOrderCreateCmd.java # 消费者下单
│   │       └─ data/
│   │           ├─ PlatformOrderDTO.java      # 含商家信息的订单
│   │           ├─ MerchantOrderDTO.java      # 商家视角订单
│   │           └─ ConsumerOrderDTO.java      # 消费者视角订单
│   │
│   ├─ app/                             # 应用层(用例按角色分离)
│   │   ├─ executor/
│   │   │   ├─ platform/                # 平台用例
│   │   │   │   ├─ OrderStatisticsExe.java     # 订单统计
│   │   │   │   └─ OrderAuditExe.java          # 订单审核
│   │   │   ├─ merchant/                # 商家用例
│   │   │   │   ├─ MerchantOrderCreateExe.java # 商家下单
│   │   │   │   ├─ OrderShipExe.java           # 发货
│   │   │   │   └─ OrderRefundAuditExe.java    # 退款审核
│   │   │   └─ consumer/                # 消费者用例
│   │   │       ├─ ConsumerOrderCreateExe.java # 消费者下单
│   │   │       ├─ OrderCancelExe.java         # 取消订单
│   │   │       └─ OrderRefundApplyExe.java    # 申请退款
│   │   └─ service/
│   │       └─ OrderFacadeServiceImpl.java     # 门面服务,聚合不同角色操作
│   │
│   ├─ domain/                          # 领域层(核心业务模型)
│   │   ├─ model/
│   │   │   ├─ entity/
│   │   │   │   ├─ Order.java                  # 订单聚合根
│   │   │   │   ├─ OrderItem.java              # 订单项
│   │   │   │   ├─ OrderPayment.java           # 支付信息
│   │   │   │   ├─ OrderLogistics.java         # 物流信息
│   │   │   │   └─ OrderRefund.java            # 退款信息
│   │   │   ├─ vo/                         # 值对象
│   │   │   │   ├─ ReceiverInfo.java           # 收货信息
│   │   │   │   ├─ InvoiceInfo.java            # 发票信息
│   │   │   │   └─ PromotionInfo.java          # 促销信息
│   │   │   └─ enum/
│   │   │       ├─ OrderSourceEnum.java        # 订单来源(平台/商家/消费者)
│   │   │       ├─ OrderTypeEnum.java          # 订单类型(普通/预售/拼团)
│   │   │       └─ OrderStatusEnum.java        # 状态机(待付款->待发货->...)
│   │   ├─ service/
│   │   │   ├─ OrderDomainService.java         # 订单领域服务
│   │   │   ├─ OrderSplitService.java          # 拆单服务(重要!)
│   │   │   ├─ OrderPriceService.java          # 价格计算(含平台/商家分成)
│   │   │   └─ OrderStatusMachine.java         # 订单状态机
│   │   ├─ gateway/
│   │   │   ├─ OrderRepository.java            # 订单仓储接口
│   │   │   ├─ ProductGateway.java             # 商品信息防腐层
│   │   │   ├─ MerchantGateway.java            # 商家信息防腐层
│   │   │   ├─ InventoryGateway.java           # 库存防腐层
│   │   │   └─ PaymentGateway.java             # 支付防腐层
│   │   └─ event/
│   │       ├─ OrderCreatedEvent.java          # 订单创建事件
│   │       ├─ OrderPaidEvent.java             # 订单支付事件
│   │       └─ OrderDeliveredEvent.java        # 订单发货事件
│   │
│   └─ infrastructure/                   # 基础设施层(多租户支持)
│       ├─ config/
│       │   ├─ MultiTenantConfig.java          # 多租户配置
│       │   ├─ DataSourceConfig.java           # 数据源(按商家分库分表)
│       │   └─ RedisConfig.java                # 缓存配置
│       ├─ persistence/
│       │   ├─ mapper/
│       │   │   ├─ OrderMapper.java
│       │   │   └─ OrderItemMapper.java
│       │   ├─ dataobject/
│       │   │   ├─ OrderDO.java                # 订单DO(含tenant_id)
│       │   │   └─ OrderItemDO.java            # 订单项DO
│       │   └─ converter/
│       │       └─ OrderConverter.java         # 转换器
│       ├─ gatewayimpl/
│       │   ├─ OrderRepositoryImpl.java        # 仓储实现
│       │   ├─ ProductGatewayImpl.java         # 商品服务调用
│       │   └─ MerchantGatewayImpl.java        # 商家服务调用
│       ├─ mq/
│       │   └─ OrderEventPublisher.java        # 订单事件发布
│       ├─ external/
│       │   ├─ ProductClient.java              # 商品服务客户端
│       │   ├─ MerchantClient.java             # 商家服务客户端
│       │   └─ LogisticsClient.java            # 物流服务客户端
│       └─ util/
│           ├─ OrderNoGenerator.java           # 订单号生成(含商家标识)
│           └─ AmountCalculator.java           # 金额计算(平台抽成)

🔗 B2B2C特有的依赖关系与数据流转
🎯 B2B2C关键实现要点

  1. 多租户数据隔离
    java

// 在领域实体中标识租户
public class Order {
private Long orderId;
private String orderNo;
private Long tenantId; // 商家ID(租户标识)
private Long platformId; // 平台ID
private Long consumerId; // 消费者ID
// …
}

// 在仓储实现中自动过滤
@Repository
public class OrderRepositoryImpl implements OrderRepository {
@Override
public List findByConsumer(Long consumerId) {
// 自动添加租户过滤条件
return orderMapper.selectByConsumer(consumerId, getCurrentTenantId());
}
}

  1. 订单拆单与分账逻辑
    java

// 订单拆分服务(重要!)
@Service
public class OrderSplitService {

// B2B2C拆单策略:按商家拆单
public List<Order> splitByMerchant(CreateOrderCmd cmd) {
    // 1. 按商家分组商品
    Map<Long, List<OrderItem>> merchantItems = 
        cmd.getItems().stream()
           .collect(Collectors.groupingBy(OrderItem::getMerchantId));

    // 2. 为每个商家创建子订单
    List<Order> subOrders = new ArrayList<>();
    merchantItems.forEach((merchantId, items) -> {
        Order subOrder = createSubOrder(cmd, merchantId, items);

        // 3. 计算平台佣金
        calculatePlatformCommission(subOrder);

        subOrders.add(subOrder);
    });

    return subOrders;
}

private void calculatePlatformCommission(Order order) {
    // 平台抽成逻辑
    BigDecimal platformRate = getPlatformRate(order.getMerchantId());
    BigDecimal commission = order.getAmount().multiply(platformRate);
    order.setPlatformCommission(commission);
    order.setMerchantAmount(order.getAmount().subtract(commission));
}

}

  1. 分层鉴权设计
    java

// 适配层控制器添加角色注解
@RestController
@RequestMapping(“/api/order”)
public class MerchantOrderController {

@MerchantAuth  // 自定义商家权限注解
@PostMapping("/ship")
public Result shipOrder(@RequestBody ShipOrderCmd cmd) {
    // 只能操作自己店铺的订单
    return orderShipExe.execute(cmd);
}

}

// 应用层执行器校验数据权限
@Component
public class OrderShipExe {
public Result execute(ShipOrderCmd cmd) {
// 1. 验证订单属于当前商家
Order order = orderRepository.findById(cmd.getOrderId());
if (!order.getMerchantId().equals(getCurrentMerchantId())) {
throw new UnauthorizedException(“无权操作此订单”);
}

    // 2. 执行业务逻辑
    order.ship(cmd.getLogisticsInfo());
    // ...
}

}

📊 部署与团队协作建议
模块开发优先级

第一阶段(基础):common + user-center + product-center

第二阶段(核心):order-center + payment-center(实现完整交易闭环)

第三阶段(扩展):merchant-backend + consumer-app + platform-admin

第四阶段(优化):supporting-services(文件、消息、搜索等服务化)

团队分工模式

平台团队:负责common、core-modules、platform-admin

商家团队:负责merchant-backend及商家相关业务逻辑

消费者团队:负责consumer-app及C端体验优化

基础架构团队:负责supporting-services和部署运维
作者:Ddd4j  创建时间:2025-12-09 14:44
最后编辑:Ddd4j  更新时间:2025-12-15 13:14