Skip to content
bitzorcas
中EN

Concept

认识 BitzOrcas.Modern:设计哲学、架构拓扑与执行管道

深入解析 BitzOrcas.Modern 企业级架构全景:从单体与微服务的权衡痛点出发,掌握垂直切片、10 级应用执行管道、双 ORM 编译期生成与跨模块契约协作边界。

Last updated

分布式系统的第一法则是不要过早进行分布式拆分。在过去十年的企业软件演进中,大量团队陷入了“微服务狂热(Microservices Hype)”:一个仅有十几人研发规模的系统被强行拆解成数十个独立服务,随之而来的是分布式事务崩溃、链路网络延迟不可控、跨服务版本断崖式失配以及指数级膨胀的 Kubernetes 基础设施维护成本。

然而,退回传统的“三层单体架构(Layered Monolith)”同样充满陷阱:控制器臃肿不堪、业务逻辑四散在各个 Service 内部、跨领域的直接数据库外键依赖横行无忌,最终软件在几年内迅速退化为不可维护的大泥球(Big Ball of Mud)。

BitzOrcas.Modern 旨在终结这种非此即彼的架构撕裂。作为面向 .NET 10 LTS 与 C# 14 构建的企业级模块化单体底座,它通过严格的物理边界治理(ArchUnitNET)、垂直切片架构(Vertical Slice)与零反射编译期生成器(Source Generators),在单一代码仓库和单一进程内同时实现单体架构的开发调试极速体验与微服务级别的强物理隔离。

核心架构拓扑全景

BitzOrcas.Modern 的系统分层自上而下严格遵循单向依赖,底层基础设施与编译期生成器共同为上层业务领域提供零反射运行时:

4. 持久化内核与基础设施 (Infrastructure & Adapters)

双生产级持久化 Adapter: SqlSugar (主) + EF Core (并列)

CAP 事务性发件箱 (Transactional Outbox) + RabbitMQ

FusionCache 多级缓存 + Redis 分布式拓扑

3. 垂直切片业务自治模块 (Vertical Slice Modules)Business 外部业务扩展

LegalTech 案件立案

Enterprise SaaS 计费

Platform 商业级平台模块

Identity & Tenancy

Unified Authorization

Auditing Engine

Files & Documents

Workflow DAG 引擎

2. 10 级应用执行管道 (Mediator Behaviors)

Logging -> License -> DelegatedSession -> Auth -> Validation

Idempotency -> Transaction -> DomainEvent -> ActivityAudit -> ReadModel

1. 接入宿主与反向代理 (Host & Gateway)

YARP 反向代理网关 (6001 / 8443)

ASP.NET Core Minimal API 宿主 (6881 / 6883)

Quartz.NET 独立分布式调度作业宿主


一次入站请求的完整生命周期(端到端时序)

在 BitzOrcas.Modern 中,任何写操作(Command)或复杂读操作(Query)均不直接在 Controller 或 Minimal API Lambda 中堆砌业务逻辑。请求被包装为强类型的 Mediator 请求后,必须顺次穿透由框架严格受控的 10 级线性执行管道:

"SQL Server 2022""CAP 事务发件箱""持久化 Adapter (SqlSugar / EF Core)""领域聚合根 (Domain Aggregate)""垂直切片用例 Handler""Mediator 10 级管道流水线""ASP.NET Core Minimal API""YARP Gateway 边缘入口""SQL Server 2022""CAP 事务发件箱""持久化 Adapter (SqlSugar / EF Core)""领域聚合根 (Domain Aggregate)""垂直切片用例 Handler""Mediator 10 级管道流水线""ASP.NET Core Minimal API""YARP Gateway 边缘入口"管道执行阶段:安全、合规与幂等锁定管道收尾阶段:原子事务、事件出箱与审计"Web 前端 / 移动端 / API 调用方"1. POST /api/cases (携带 JWT / Idempotency-Key)12. 路由转发并透传分布式追踪标头 (traceparent)23. 分派 Mediator 命令: CreateCaseIntakeCommand34. 日志上下文绑定与 TraceId 关联 (LoggingBehavior)45. 商业许可与租户配额阻断校验 (RuntimeLicenseBehavior)56. 运营代客 (Impersonation) 写权限沙箱审查 (DelegatedSessionBehavior)67. RBAC / ABAC 强类型资源动作决策 (AuthorizationBehavior)78. 三阶动态校验 (IRequestRule + ITenantValidationStrategy)89. 获取 Redis 分布式防重放锁 (IdempotencyBehavior)910. 校验全部通过,移交清洗后的强类型 Command1011. 执行领域业务逻辑与不变量计算 (CreateCase)1112. 聚合根状态变更并压入领域事件 (AddDomainEvent)1213. 标记聚合根待保存 (IEntitySet.InsertAsync)1314. 用例执行成功,返回 Result<CaseId>1415. 开启底层数据库本地事务 (BeginTransaction)1516. 持久化聚合根实体变更1617. 聚合根领域事件转集成事件落入 CAP Outbox 表 (同事务)1718. 提交事务 (COMMIT Transaction)1819. 异步写入结构化审计日志 Diff (ActivityAuditBehavior)1920. 释放幂等锁并输出标准 JSON 响应 (HTTP 200 OK)20"Web 前端 / 移动端 / API 调用方"

核心架构原则与设计权衡

1. 垂直切片架构(Vertical Slice Architecture)

传统架构通常采用自上而下的横向技术分层:

Controllers/ ──> Services/ ──> Repositories/ ──> Entities/

当团队需要为“律所利益冲突检索”新增一个校验字段时,开发者必须在 ConflictController、IConflictService、ConflictService、ConflictDto、ConflictMapper、ConflictEntity 之间来回跳跃,认知负荷极其沉重。

BitzOrcas 彻底颠覆这一模式,采用**“以业务用例为核心的垂直切片”**。每个业务切片独立内聚为一个独立的编译单元:

src/Platform/Identity/BitzOrcas.Identity.Application/Commands/Login/
├── Login.cs # Minimal API 路由定义 + Mediator Command 契约
├── LoginHandler.cs # 纯粹的业务领域编排逻辑
├── LoginRequestRule.cs # 强类型不变量静态校验规则 (Tier 1)
└── LoginResult.cs # 强类型返回模型 (无贫血包装)
  • 高内聚低耦合:业务变更仅限于单个切片目录,多人并行开发零 Git 冲突;
  • 重构自愈:删除一个业务功能只需物理删除对应切片目录,不会在全工程留下难以清理的死代码残留。

2. 10 级应用执行管道(Mediator Pipeline Behaviors)

框架将所有企业级非功能性需求(Non-Functional Requirements)全部下沉至管道中由框架托管。各管道按严格的确定性顺序执行,保证业务 Handler 纯净无污染:

顺序管道行为名称职责定位拦截短路语义
01LoggingPipelineBehavior关联 traceparent,统计管道执行耗时始终放行,异常时记录完整上下文与调用堆栈
02RuntimeLicensePipelineBehavior校验商业证书有效期与租户席位授权证书无效或过期直接阻断,响应 403 Forbidden
03DelegatedSessionRestrictionPipelineBehavior审查运维或客服代入操作(Impersonation)发现越权写操作立即熔断,响应 403 Forbidden
04AuthorizationPipelineBehavior统一 RBAC / ABAC / ReBAC 权限裁决权限策略未满足立即阻断,响应 403 Forbidden
05ValidationPipelineBehavior运行 IRequestRule 与租户动态策略任一规则违背立即中断,响应 400 Bad Request
06IdempotencyPipelineBehavior校验 Idempotency-Key,争抢 Redis 分布式锁重复提交直接返回已缓存的历史计算结果
07TransactionPipelineBehavior自动开启数据库事务,确保原子提交业务异常自动触发 Rollback,保证状态一致
08DomainEventDispatchPipelineBehavior聚合根领域事件分发与 CAP 发件箱落盘与业务更新同一物理事务提交,保证至少一次投递
09ActivityAuditPipelineBehavior提取实体变更前/后 Diff,结构化审计落盘事务成功后异步写入,不阻塞请求响应通道
10ReadModelDisplayPipelineBehavior针对 Query 查询结果执行字典与多语言充水仅在查询管道生效,零反射高性能投影组装

3. 统一聚合根与编译期双 ORM 生成

在许多传统系统中,开发者被要求区分 DomainModel 与 DatabaseEntity,导致系统充斥着成百上千个毫无实际意义的 AutoMapper 映射配置。

在 BitzOrcas.Modern 中,对于 95% 的业务场景,领域聚合根即持久化模型(Unified Aggregate Root):

  • 聚合根继承自 Entity<TId> 或 AggregateRoot<TId>,使用强类型 ID(如 UserId、MatterId);
  • 通过标记中立的 Fluent 映射元数据,Roslyn 增量生成器(Incremental Source Generator)在编译期直接产出高性能的静态绑定逻辑;
  • 双 ORM 生产级适配:支持 SqlSugar(默认主适配器)与 EF Core 并列运行,业务层完全基于 IEntitySet<TAggregate> 进行抽象,永不泄漏具体 ORM 的底层类型。

跨模块协作硬性物理法则

为了防止单体项目在团队规模扩大后退化为纠缠不清的复杂网络,模块间交互必须严格遵守以下 5 项硬性物理法则:

模块 B 契约包 (Identity.Contracts)模块 A (例如: LegalTech 案件中心)1. 仅依赖公开 Contracts2. 通过 CAP Outbox异步解耦严禁跨模块穿透引用模块 B 内部实现 (Identity.Infrastructure)

用户聚合根 (UserAggregate)

用户内部持久化表

案件立案 Handler

案件聚合根 (MatterAggregate)

IUserDirectoryQueryService
(只读查询契约)

UserDisabledIntegrationEvent
(集成事件契约)

  1. 契约单向依赖:模块 A 如需调用模块 B 的能力,只允许项目引用 B.Contracts,严禁直接引用 B.Application、B.Domain 或 B.Infrastructure。
  2. 读操作走只读查询端口:跨模块同步数据获取必须通过目标模块在 *.Contracts 中暴露的专用只读服务(如 IUserLookupService),严禁跨模块直接注入对方的 IEntitySet<T>。
  3. 写操作必须走命令分派或异步事件:跨模块的业务联动优先通过 CAP 事务性发件箱发布集成事件(Integration Event)完成最终一致性;同步写操作必须分派强类型 Mediator Command。
  4. 领域事件严禁跨越模块边界:聚合根通过 AddDomainEvent() 产生的事件仅在当前模块内部、同一事务的执行管道中分发;跨模块通知必须转换为明确的集成事件。
  5. 数据库 Schema 严格隔离:各模块在物理数据库中拥有独立的表前缀或独立的 Database Schema,严禁书写跨模块表的隐式 SQL JOIN 查询。

核心术语字典(Glossary)

核心术语英文对照架构定义与规范约束
模块化单体Modular Monolith将多个高度内聚、业务边界清晰的领域模块集成于单一 .NET 解决方案中。代码以单体形式部署,内部依赖受 ArchUnit 门禁强制检验。
垂直切片Vertical Slice按照独立的业务用例(Use Case)垂直组织代码,一个用例包含其路由、命令、规则与处理器,替代横向分层。
统一聚合根Unified Aggregate Root承载业务状态、不变量守门与领域事件产出的实体基类,同时兼备持久化元数据,避免多余的 DTO 映射。
10 级执行管道10-Tier Application Pipeline基于 Mediator 的线性责任链,由框架全自动执行日志、授权、校验、幂等、事务、事件分发与结构化审计。
四阶业务校验4-Tier Validation Pattern统一静态基础规则(Tier 1)+ 复合业务策略(Tier 2A)+ 租户动态热配置(Tier 2B)+ 现场低代码规则(Tier 3)。
事务性发件箱Transactional Outbox业务数据持久化与消息发布在同一数据库事务中原子写入,由后台守护进程可靠投递至 RabbitMQ 等消息中介。
代入操作Impersonation运维或技术支持人员经租户授权后,以受限操作员身份登录排查问题,写操作被安全管道严格限制。
Native AOTAhead-of-Time Compilation.NET 10 的预先编译技术,将 C# 代码直接编译为平台原生机器码,消除 JIT 开销并实现秒级极速冷启动。

解决方案物理组织架构

在 /Users/linxinyu/Git/Repos/Codeup/BitzOrcasVNext 中,源码仓库按照严格的工程边界进行物理分层:

src/
├── Framework/ # 零业务依赖的纯技术底座
│ ├── BitzOrcas.Application/ # 10 级管道行为、校验策略接口、授权抽象
│ ├── BitzOrcas.Domain/ # 实体基类、统一聚合根接口、Result/Error 原语
│ ├── BitzOrcas.Persistence/ # 双持久化 Adapter (SqlSugar / EF Core) 与元数据
│ └── BitzOrcas.Workflow/ # 自研轻量级 DAG 状态机工作流引擎内核
├── Platform/ # 平台通用商业能力模块 (以 NuGet/私有包交付)
│ ├── Identity/ # 多租户管理、用户认证、2FA、外部登录与密码加密
│ ├── Authorization/ # RBAC、ABAC、ReBAC Lite 统一授权决策中心
│ ├── Auditing/ # 全局活动审计日志、实体变更 Diff 追踪与信封
│ ├── Files/ # 对象存储抽象、分片上传与文件生命周期
│ └── Notifications/ # 站内信、邮件、短信多通道消息分发
├── Hosts/ # 运行宿主与组合根 (Composition Root)
│ ├── BitzOrcas.Api/ # Minimal API 主程序入口,装配全量模块路由
│ ├── BitzOrcas.Gateway/ # YARP 边缘反向代理与流量调度中心
│ └── BitzOrcas.JobHost/ # Quartz.NET 独立作业宿主,承载租户定时任务
└── Tooling/ # 研发效能与工程工具链
├── BitzOrcas.Cli/ # 官方 CLI 脚手架,一键生成垂直切片与模块
└── BitzOrcas.Generators/ # Roslyn 增量源生成器,消除反射装配

通过这一套严谨的架构设计,BitzOrcas.Modern 既赋予了开发者在单体中飞速编码与联调的敏捷度,又赋予了企业在架构演进至超大规模时无缝拆分微服务的物理自由度。

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%