步骤4 主要危险区域
确定架构中最容易出错的区域。可以通过质量属性和交叉问题对危险区域进行整理。
质量属性
找出对于应用和场景很重要的质量属性。比如,大部分应用程序都需要解决安全性与性能的问题,而这些问题还需要根据易用性、灵活性等可能更为重要的属性进行权衡分析。
以下是需要注意的重要的质量属性。
范畴 | 注意事项 |
有效性 | 如何设计故障转移支持 |
如何设计一个备用站点 | |
怎样计划备份与恢复 | |
如何设计运行时的更新 | |
概念完整性 | 如何分离对外部的依赖性 |
如何整合旧技术 | |
如何在不打断客户的情况下发展系统 | |
灵活性 | 如何处理动态业务规则 |
如何处理动态UI | |
如何处理数据与逻辑过程中的变化 | |
如何处理业务需要的变化 | |
互操作性 | 如何让应用在独立发展的同时实现互操作 |
如何通过服务接口分离系统 | |
如何通过层的映射分离系统 | |
易维护性 | 如何减少层与组件之间的依赖性 |
如何实现一个插件式的架构 | |
如何选择合适的通信模型 | |
易管理性 | 如何了解主要的失败模式 |
如何对系统操作与健康状态进行监控 | |
如何根据负载对系统进行调整 | |
性能 | 如何确定缓存策略 |
如何设计层间的高性能通信 | |
如何设计高性能数据存取 | |
如何有效地管理资源 | |
可靠性 | 如何处理不可靠的外部系统 |
如何审查请求与任务 | |
如何对负载进行重定向 | |
如何处理失效的通信 | |
如何处理失效的操作 | |
如何处理异常 | |
重用性 | 如何减少层与组件之间的重复性 |
如何实现跨系统的共享 | |
如何实现组件和层之间的功能共享 | |
可扩展性 | 如何设计可扩展的层与级 |
如何扩展 | |
如何处理传输与负载的测试点 | |
安全性 | 如何解决认证与授权问题 |
如何防止恶意输入 | |
如何保护敏感数据 | |
支持 | 如何设计审查与记录 |
如何设计使用问题信息的记录 | |
易测性 | 如何设计才能方便测试 |
如何设计单元测试 | |
如何设计UI自动化 | |
可用性 | 如何设计才能让用户有更多的权限 |
如何改善响应性 | |
如何避免常见的用户体验问题 |
架构框架
架构框架代表了你在层与级上可能会遇到的交叉问题。这些也是最容易出现重大设计错误的区域。可以通过架构框架来发现需要额外注意危险区域。
你可以使用以下架构框架来发现需要额外注意的交叉问题。
领域 | 描述 |
认证与授权 | 如何选择认证策略 |
如何选择授权策略 | |
如何在不同层与级之间传递身份消息 | |
如何在不使用活动目录的情况下存储用户的身份信息 | |
缓存与状态 | 如何选择合适的缓存技术 |
如何决定缓存哪些数据 | |
如何决定在哪里缓存数据 | |
如何检查过期策略 | |
通信 | 如何为不同的层与级选择合适的通信协议 |
如何设计层之间的松耦合 | |
如何实现异步通信 | |
如何传送敏感数据 | |
组合 | 如何为用户界面选择组合模式 |
如何避免UI模块之间的依赖性 | |
如何处理UI模块之间通信问题 | |
并发与事件 | 如何处理并发线程 |
如何选择积极并行与保守并行 | |
如何处理分布式事件 | |
如何处理长期事件 | |
配置管理 | 如何确定需要配置的信息 |
如何确定在哪里储存配置信息 | |
如何保护敏感配置信息 | |
如何处理簇中的配置信息 | |
耦合与内聚 | 如何选择合适的层策略来分离问题 |
如何在层里设计高内聚的组件并对其分组 | |
如何确定松耦合是否适合层里的组件 | |
数据存取 | 如何管理数据库的连接 |
如何处理异常 | |
如何改善性能 | |
如何处理二进制大对象(blob) | |
异常管理 | 如何处理异常 |
如何记录异常信息 | |
如何在需要的时候进行通知 | |
日志与器械 | 如何决定记录哪些信息 |
如何让日志可修改 | |
如何确定需要什么等级的器械 | |
用户体验 | 如何提高任务的有效性与效率 |
如何改善响应性 | |
如何提高用户权限 | |
如何改善外观与体验 | |
验证 | 如何确定在什么位置怎样执行验证 |
如何验证长度、范围、格式、类型 | |
如何限制及拒绝输入 | |
如何整理输出 | |
工作流 | 如何选择合适的工作流技术 |
如何处理同一工作流中的并发问题 | |
如何处理工作流中的错误 | |
如何编排工作流中的过程 |