架构师除了编码外, 需要负责如下的工作
- 从工程角度定义问题
- 将软件系统分解成多个可实现的模块
- 兼顾大局,确保系统整体有效工作
- 权衡软件质量属性和软件需求
- 管控技术债务
- 提升整个团队的架构设计能力
- 技术领导者
从工程角度定义问题
软件架构设计是一门以人为本的学科, 软件的所有的利益方相关都有自己对项目的预期, 架构师需要和产品经理和项目经理一起协作定义软件项目的需求于目标
除了需求目标,架构师还需要关注另外一个目标即是软件的质量目标.考虑约束和特性.
分解系统,分配职责
架构师只有把软件系统进行分解, 才能制定出满足质量属性和其他系统需求的策略. 让不同的小组的人并行完成功能模块, 可以提高项目的完成速度
分解系统最重要的是, 拆分打散要确保架构师能把它们组装回去.协同工作
所以各个模块中的接口交互, 需要架构师参与定义和监控
关注大局
所有系统都处于客观世界的大背景下, 理想的情况下, 软件架构应该与外围环境和谐共生. 全局角度考虑整体系统需要关注 人员, 过程, 业务需求, 以及其他技术和非技术的影响. 不能着眼于局部细节设计
在质量属性之间做出取舍
CAP 理论:
Consistency : 一致性
Availability: 可用性
Partition tolerance: 分区容错性
需求功能和质量
管理技术债务
所有的软件都有技术债务. 架构师应该指明技术债务,帮助利益相关方决定采取何种措施管理它们
提升团队的架构技能
架构师是整个团队的导师和顾问, 设计炫酷却无人理解的架构毫无意义, 作为团队的架构专家, 你有责任向团队分享知识.