SuperAPI AI 工具集

enterprise-architecture-patterns

编程与开发

查看项目

更新于 10-15 12:05

技能介绍

用途

本技能用于掌握企业架构模式、分布式系统设计与可扩展应用开发,覆盖构建健壮、可维护、可扩展企业系统的战略与战术模式。

何时使用

资料列出的适用场景包括:

  • 为分布式系统设计微服务架构
  • 在复杂业务领域实施领域驱动设计(DDD)
  • 使用事件溯源与 CQRS 构建事件驱动架构
  • 为分布式事务设计 Saga 模式
  • 实施 API 网关与服务网格架构
  • 应用横向与纵向扩展
  • 构建具备容错能力的弹性系统
  • 将单体迁移到微服务
  • 设计多租户 SaaS 架构
  • 实施后端为前端(BFF)模式
  • 使用事件流构建实时系统
  • 架构云原生应用

核心架构概念

系统设计基础

  • 关注点分离:将系统划分为不同部分,每部分处理独立关注点,降低耦合、提高内聚。
  • 模块化:将系统设计为可独立开发、测试和部署的模块集合。
  • 抽象:用简单接口隐藏复杂实现细节。

可扩展性维度

  • 横向扩展:增加更多机器/实例
  • 纵向扩展:为现有机器增加更多资源
  • 数据扩展:将数据分区到多个存储
  • 功能扩展:按业务能力分解

一致性模型

  • 强一致性:所有节点同时看到相同数据
  • 最终一致性:所有节点最终看到相同数据
  • 因果一致性:相关操作看到一致状态
  • 读己之写一致性:用户立即看到自己的更新

CAP 定理

分布式系统中只能同时保证三项属性中的两项:一致性、可用性、分区容错性。

分布式计算谬误

资料列出八项:网络可靠、延迟为零、带宽无限、网络安全、拓扑不变、只有一个管理员、传输成本为零、网络同构。

领域驱动设计(DDD)

战略设计模式

限界上下文:领域模型保持一致且有效的显式边界,定义特定术语、定义和规则适用的范围。关键原则:每个限界上下文有自己的通用语言;上下文内模型一致;跨上下文集成需要翻译;上下文与业务能力对齐。资料给出电商系统中 Sales 与 Billing 两个上下文各自定义 Customer 类的代码示例。

上下文映射模式:

  • 共享内核:两个上下文共享领域模型子集;适用于团队紧密协作;风险是变更影响多个上下文。
  • 客户-供应商:下游上下文依赖上游;适用于存在清晰依赖方向;上游提供定义好的 API。
  • 遵奉者:下游遵从上游模型;适用于上游为外部/不可更改;适配外部 API。
  • 防腐层:在上下文之间翻译;适用于保护免受遗留或外部系统影响;用适配器/门面翻译模型。
  • 各行其道:上下文完全独立;适用于无需集成;必要时重复功能。
  • 开放主机服务:定义良好的集成协议;适用于多个消费者需要访问;如 REST API、GraphQL、gRPC。
  • 发布语言:共享且文档良好的语言;适用于存在行业标准;如 XML schema、JSON schema、OpenAPI。

通用语言:开发者与领域专家之间共享、在代码、文档和对话中一致使用的词汇。资料给出用业务领域术语(如 OrderFulfillment)替代通用技术术语(如 DataProcessor)的代码对比。

战术设计模式

实体:具有唯一标识、随时间持续存在的对象,跟踪连续性与生命周期。特征:唯一标识符、可变状态、生命周期、基于标识而非属性判断相等。资料给出 Order 类示例,包含 addItem、confirm 等业务行为与基于标识的 equals。

值对象:由属性而非标识定义、不可变的对象,表示领域的描述性方面。特征:无唯一标识、不可变、基于全部属性判断相等、常按值传递、可安全共享。资料给出 Money 与 Address 类示例,运算返回新实例。

聚合:具有清晰一致性边界的实体与值对象集群,通过单一根实体访问。关键原则:一个聚合等于一个事务边界;外部只引用聚合根;根强制所有不变量;小聚合性能更好;聚合之间最终一致。设计规则:在一致性边界内建模真正的不变量;设计小聚合;仅通过标识引用其他聚合;使用最终一致性更新其他聚合;使用仓储检索聚合。资料给出 Order 聚合根与 OrderItem 实体的完整代码示例。

领域事件:表示领域中发生的重要事件,实现松耦合与最终一致性。特征:过去时命名(OrderPlaced、PaymentProcessed)、不可变、包含所有必要信息、带时间戳、通常包含聚合 ID。资料给出 DomainEvent 接口、OrderPlacedEvent 类与 DomainEventPublisher 的代码示例。

仓储:访问聚合的抽象,提供类集合接口并隐藏持久化细节。原则:每个聚合根一个仓储;面向集合的接口;隐藏数据库实现;返回完整形成的聚合;支持按 ID 与业务条件查询。资料给出 OrderRepository 接口与实现示例。

领域服务:不自然属于任何实体或值对象的操作,封装涉及多个聚合的领域逻辑。使用时机:逻辑跨越多个聚合;操作是重要的领域概念;行为不适合放在实体或值对象中。资料给出 PricingService 示例。

使用方式

资料未提供安装命令、调用方式或具体操作步骤,暂未提供。

适用场景

见上文“何时使用”所列场景,主要面向微服务、事件驱动架构、分布式事务、云原生与多租户 SaaS 等企业级系统设计。

限制

资料未明确列出该技能的限制、依赖或前置条件,暂未提供。