在这里插入代码片
在软件架构的语境下,特别是参考ISAQB(国际软件架构认证委员会)的学习目标,横切概念指的是那些贯穿于系统多个模块、层或组件,并且影响这些部分的设计和实现的关注点或需求。
它们之所以被称为“横切”,是因为它们不像核心业务功能那样通常被封装在特定的模块内,而是像一把刀一样“横向切过”系统的主要分层或功能划分。
核心特征:
- 非功能性(或跨越功能性边界): 虽然有些横切概念(如GUI)也涉及功能,但其核心影响往往是系统级的属性(非功能性需求),如性能、安全性、可维护性、一致性等。它们为实现业务功能提供必要的支撑环境。
- 全局性影响: 它们的实现决策会影响到系统中多个甚至所有部分。改变一个横切概念的设计或技术选型,通常需要修改多个不同的模块。
- 分散性: 实现横切概念的代码逻辑往往无法完全集中在一个地方,而是需要分散在多个需要该功能的模块中(尽管我们努力通过架构模式和技术来集中管理)。
- 与核心业务逻辑正交: 它们通常独立于具体的业务领域逻辑。例如,无论你的业务是电商、银行还是社交软件,你都需要考虑日志记录、安全认证、事务管理等。
你提到的例子是典型的横切概念:
- 实例持久化: 将对象状态保存到数据库或其他存储介质。几乎所有重要的业务对象都需要持久化,这个需求横跨了多个业务域模块(如订单、用户、产品)。
- 通信: 包括进程内通信(如事件总线)、进程间通信(如RPC/REST API)、与外部系统集成等。不同组件、服务、微服务之间都需要通信机制。
- 图形用户界面: 为用户提供交互界面。虽然可能有一个专门的“前端层”,但GUI需要展示来自后端众多不同业务模块的数据,并与之交互。其设计(如响应式、导航、风格一致性)会影响整个系统的用户体验。
- 安全: 认证(Authentication)、授权(Authorization)、数据加密、防止攻击(如XSS, SQL注入)。安全需求几乎渗透到系统的每一个访问点(API、UI、数据存储)。
- 日志记录: 记录系统运行信息用于调试、监控、审计。所有重要的功能点都需要记录。
- 事务管理: 确保跨越多个操作或服务调用的数据一致性(ACID属性)。影响涉及数据修改的多个业务操作。
- 错误处理与容错: 系统如何应对异常和故障。需要在各个可能出错的点(网络调用、数据库操作、业务逻辑处理)进行设计。
- 配置管理: 系统参数的集中管理和分发。所有需要配置的组件都会受到影响。
- 监控与可观测性: 收集系统运行指标、日志、追踪信息以了解系统健康状况。需要在整个系统中埋点。
为什么在ISAQB学习目标中强调“确定并选定横切概念”?
软件架构师的核心职责之一是管理复杂性并确保系统质量属性(非功能性需求)。横切概念:
- 对系统质量属性影响巨大: 它们的实现方式直接决定了系统在安全性、性能、可维护性、可靠性等方面的表现。
- 是架构决策的关键领域: 选择何种持久化技术(SQL vs NoSQL)、通信协议(REST vs gRPC vs Messaging)、安全框架、日志方案等,都是重大的、系统级的架构决策。
- 需要全局视角和统一设计: 架构师必须识别出这些横切概念,并为其设计一致的、系统的解决方案(架构策略),避免每个模块或团队各自为政,导致系统混乱、难以维护、存在安全漏洞或性能瓶颈。
- 驱动分层和模块化设计: 处理横切概念的有效方式通常涉及特定的架构模式,如分层架构(将UI、业务逻辑、持久化分离)、使用中间件(处理通信、安全)、面向切面编程(集中处理日志、事务等)。识别横切概念有助于定义清晰的架构层和模块边界。
总结:
在ISAQB的学习目标中,“确定并选定横切概念”意味着要求软件架构师候选人能够:
- 识别出 那些贯穿系统多个部分、对系统级质量属性至关重要的关注点(如持久化、通信、安全、日志等)。
- 理解 这些概念对系统整体设计的影响。
- 评估和选择 合适的技术、框架和架构策略来系统地、一致地实现这些横切概念,以满足系统的非功能性需求。
- 设计架构 以有效地封装和管理这些横切关注点,减少其对核心业务逻辑代码的侵入性,提高系统的可维护性、可扩展性和质量。
掌握识别和处理横切概念的能力是区分一个优秀软件架构师的关键。