# 4.4 软件架构中技术/横切概念

上一节将视图作为描述软件架构的核心手段，并阐述了此类描述的基础。现在将以简短的概念描述形式介绍额外所谓的“技术”或“横切”概念（换句话说，明确不是以现成的解决方案的形式）。这些概念对某些架构描述可能很重要，但不一定与特定架构相关。在许多情况下，预先存在的概念可以在不同的系统中重复使用。

此类技术/横切概念涵盖流程控制、错误处理、集成、国际化、持久性、部署等等。我们将首先解释此类概念的理论，然后给出两个简短的示例。这些描述绝不是详尽无遗的。

#### &#xD;4.4.1 技术 /横切概念-示例维度

顾名思义，软件架构中的技术或横切概念通常在架构的多个部分（甚至全部）生效。同时，这些概念中的几个通常必须相互正交地处理。图 4 - 21 通过将错误处理、日志记录和持久性的概念放置在坐标系的不同维度来说明这种方法。特别是错误处理和日志记录经常在软件系统的大多数子区域中使用，但它们本身彼此独立（尽管在错误处理的范围内日志记录也可用于错误日志）。在常见的多层架构中（参见\[DE++09]），持久性通常仅在一个区域中封装，但通常包括错误处理，并且可能还使用日志记录。

软件架构图4-21Sample维度\
作为进一步的例子，在数据库联合架构或异构分布式信息系统中（见\[CKH05]），自治、异构和分布这些维度是典型的横切概念，在相关的软件架构中需要加以解决。原则上，对于软件架构的所有技术或横切概念，都可以进行类似的正交/横切方面的考虑。

#### &#xD;4.4.2 错误处理

在软件系统的使用和执行过程中，操作错误、部分停机和类似的错误情况是日常常见的现象。在软件架构的背景下，也许主要任务是考虑如何在系统运行期间处理可预见的错误。这可以包括，例如，拦截形式上无效的用户输入，或者软件对连接的数据库系统故障的“合理”反应。\
典型的错误处理任务需要由架构和开发团队解决，包括：\
• 错误情况的识别\
• 对可预见错误定义适当的反应，包括\
o 分类为类别和严重级别\
o 区分功能错误和技术错误\
• 尽量减少错误的影响\
• 使错误原因的诊断更容易 - 例如，使用软件系统报告：\
o 出了什么问题？\
o 在哪里发生的？\
o 为什么出错了？\
• 通过软件系统进行错误预防，例如：\
o 可识别风险的早期预警\
o 允许处理公差\
• 定义错误处理的技术，例如：\
o C 函数调用返回状态码。\
o Java 异常返回包含上述信息的错误描述。

作为软件架构师，您的（也）任务是确保端到端的错误处理成为软件系统的一部分，因为仅在“良好情况”下工作的程序不适合实际使用。

#### &#xD;4.4.3 安全性

在软件架构中，另一个典型的横切关注点是安全性——在现实的软件项目中，合适的横切概念在这个主题上往往处理得太迟。\
安全性是一个特别广泛的主题，因为它或多或少会影响整个软件应用程序。它从用户界面开始（例如，用户登录和防止脚本攻击），贯穿整个代码（例如，防止缓冲区溢出攻击），一直延伸到数据库及其用户，他们应该只被授予特定的访问权限。这只是众多存在的例子中的一部分。\
除了软件，还必须采取组织措施——例如，定义必须与管理协调的用户组和角色，规划定期的安全审计，在涉及敏感个人数据的情况下让员工代表参与等等。\
更一般地说，需要解决的一组最低的安全问题是：\
• 认证\
o 确定发送者的身份\
• 授权\
o 根据用户的身份授予用户权限\
• 完整性\
o 对操纵受保护数据的识别\
• 保密\
o 传输、发送和存储数据，使其不能被未授权方访问\
• 不可否认性\
o 接收的消息不能被发送者否认\
• 可用性\
o 采取措施应对不可预见或故意造成的系统故障。
