设计软件

1架构驱动力
如何理解架构驱动力?架构是由什么东西驱动的,驱动架构的成型因素就是架构驱动力
功能需求,质量属性(非功能需求),约束(外界的限制,如:技术选型,部署平台),原则(为了将一致性和清晰度引入代码库而采用的原则或架构的原则),理解影响(根据特定的目标和语境,作出最优解)

软件架构谈论的是最重要的设计决策,其重要性以变动的成本来衡量。

2质量属性(非功能需求)
非功能需求一般被看作“能力”,主要跟服务质量有关
性能(快慢),可伸缩性(相同的时间内处理更多的请求),可用性(9的个数指正常运行时间的百分比),安全性,灾难恢复,可访问性(残疾人也能访问),检测(心跳/告警),管理,审计(系统数据的修改记录),灵活性,可拓展性,可维护性(很难量化,不如遵循架构开发原则靠谱),法律法规,国际化,本地化

网上找的可用性图

可用性和9的关系,5个9五分钟,6个9三十一秒,3个9八小时
计算公式:全年不可用时间=99.999几个看你的99% * 365 *时间单位

3处理非功能需求
捕获,提炼,量化非功能需求,给出书面的表示,这样就可以检验和测试。不能只是简单的口头描述

4约束
只要是现实世界都有约束。
时间和预算的约束,技术约束(可用的技术清单,现有系统的互操作性,目标部署平台等),人员约束,组织约束。
约束可以划分优先级,并且是可商量的。。
软件架构角色的一部分就是找出这些约束,搞清楚为什么会被强加进来,让它们帮助塑造你的软件架构。

5原则
约束是强加于你的,而原则是你为了将标准方法和一致性引入构建软件的方式而采用的。
开发原则(编码标准规范,自动化测试,静态分析工具等),架构原则(分层策略比如mvc,高内聚低耦合,无状态,充血与贫血)

谨防最佳实践,虽然最佳实践是行动的指导,但是也并不是最完美的,一定要是按照具体的语境处理问题

6技术不是实现细节
如果你不明白选择X技术而非Y的权衡,那就不应该做决策!技术不只是一个“实现细节”你做出的技术决策跟你分解,安排和设计软件系统的方式重要!

7更多分层等同于更高复杂度
分层越多,系统越松散,同时带来了复杂度的提升。需要根据实际的项目需要进行分层。

8协同设计是一把双刃剑
我们给出的策略都是基于自己已有知识,经验和喜好给出的。沟通然后达成共识,这才是最好的方式。

9软件架构是对话的平台
软件设计过程是一个交流的平台。

你可能感兴趣的:(设计软件)