软件的设计原则,设计模式以及软件的质量属性

软件的设计

ant design 设计价值观
在蚂蚁的开源项目ant design的介绍中,谈到了价值观,原则和模式之间的关系:
在这里插入图片描述
设计价值观是蚂蚁设计团队自己发明的概念(至少我没在其他地方看到过,或许是我前端经验不够丰富),但是设计原则和设计模式在软件设计领域中是非常常见的,并且蚂蚁团队对这两个概念的理解也很准确,即:设计原则是思想,用于指导软件的实现;设计模式其实就是行之有效的解决特定问题的步骤,也称为解决方案。设计原则回答为什么要这么做的问题,设计模式回答怎么做的问题。
道家思想讲究道和术,道就是原则,术就是模式。

设计原则

以SOLID原则为代表,它指出了一个优秀的软件设计应该具有的特性。违背这些特性的软件设计都值得怀疑(不是绝对的)。我们应该尽量设计出遵守这些原则的软件,除非有很好的不遵守的理由。设计原则之间有可能互相冲突,这时候就应该根据具体的业务场景决定哪个功能更重要。好的软件可能不会遵守所有的设计原则,但绝不会一条都不遵守。
S:单一职责原则(高内聚低耦合)
O:开闭原则(易于维护和扩展)
L:里氏替换原则(维护继承体系的一致性)
I:接口隔离原则 (只提供给客户必需的功能)
D:依赖反转原则 (策略和机制的分离,代码复用)
说实话我觉得里氏替换原则以及迪米特法则的层次不够高。这两者其实都是在面向对象的设计里指导类的设计的。而其他原则不仅可以用于指导类的设计,还可以用于指导package(模块),微服务的服务划分,SOA的服务设计,甚至是领域建模。不过话说回来,在面向对象的设计者眼中,一切研究的对象都是类。所以也可以自圆其说吧。

设计模式

以23种设计模式为代表。每一种设计模式都是针对某一类问题的最佳实践。每一个设计模式其实都遵守了SOLID设计原则或者迪米特法则。比如:
command模式,分离了任务的创建和执行,任务的创建者不必关心任务何时执行,以怎样的方式执行,于是任务的执行就可以有多种实现方式,可以与任务的创建类无缝插拔。这个模式体现的设计原则有:单一职责原则,开闭原则。

软件的质量属性

定义

一、功能性

功能性是指软件在指定条件下使用时,满足用户明确和隐含需求的功能的能力。功能性包含以下5个子特性。

1、适合性:软件为指定的任务和用户目标提供一组合适功能的能力。

2、准确性:软件提供具有所需精确度的正确或相符的结果或效果的能力。

3、互操作性:软件与一个或更多的规定系统进行交互的能力。

4、保密安全性:软件保护信息和数据的能力,以使未授权的人员或系统不能阅读或修改这些信息和数据,而不拒绝授权人员或系统对它们的访问。

5、功能性依从性:软件遵循与功能性相关的标准、约定或法规以及类似规定的能力。这些标准要考虑国际标准、国家标准、行业标准、企业内部规范等。

二、可靠性

可靠性是指软件在指定条件下使用时,维持规定的性能级别的能力。可靠性要求有两个重要的概念:平均故障修复时间(mean time to repair,MTTR)、平均无故障时间(mean time between failures,MTBF),MTTR值越小,说明故障修复时间越短,故障处理响应速度较快,MTBF值越大,说明软件故障率低,系统可靠性高。可靠性包含以下4个子特性。

1、成熟性:软件为避免由软件中错误而导致失效的能力。

2、容错性:在软件出现故障或者违反指定接口的情况下,软件维持规定的性能级别的能力。

3、易恢复性:在失效发生的情况下,软件重建规定的性能级别并恢复受直接影响的数据的能力。

4、可靠性依从性:软件遵循与可靠性相关的标准、约定或法规的能力。

三、易用性

易用性是指在指定条件下使用时,软件被理解、学习、使用和吸引用户的能力。易用性包含以下5个子特性。

1、易理解性:软件使用户能理解软件是否合适,以及如何能将软件用于特定的任务和使用环境的能力。

2、易学性:软件使用户能学习其应用的能力。

3、易操作性:软件使用户能操作和控制它的能力。

4、吸引性:软件吸引用户的能力。

5、易用性依从性:软件遵循与易用性相关的标准、约定、风格指南或法规的能力。这些标准要考虑国际标准、国家标准、行业标准、企业内部规范等,如企业内部的界面规范。

四、效率

效率是指在规定条件下,相对于所用资源的数量,软件可提供适当性能的能力。效率包含以下3个子特性。

1、时间特性:在规定条件下,软件执行其功能时,提供适当的响应和处理时间以及吞吐率的能力,即完成用户的某个功能需要的响应时间。

2、资源利用性:在规定条件下,软件执行其功能时,使用合适的资源数量和类别的能力。

3、效率依从性:软件遵循与效率相关的标准或约定的能力。

五、可维护性

可维护性是指软件可被修改的能力。修改可能包括修正、改进或软件对环境、需求和功能规格说明变化的适应。可维护性包含以下5个子特性。

1、易分析性:软件诊断软件中的缺陷、失效原因或识别待修改部分的能力。

2、易改变性:软件使指定的修改可以被实现的能力。

3、稳定性:软件避免由于软件修改而造成意外结果的能力。

4、易测试性:软件使已修改软件能被确认的能力。

5、维护性依从性:软件遵循与维护性相关的标准或约定的能力。

六、可移植性

可移植性是指软件从一种环境迁移到另外一种环境的能力。可移植性包含以下5个子特性。

1、适应性:软件无须采用有别于为考虑该软件的目的而准备的活动或手段,就可能适应不同指定环境的能力。

2、易安装性:软件在指定环境中被安装的能力。

3、共存性:软件在公共环境中同与其分享公共资源的其他独立软件共存的能力。

4、易替换性:软件在同样环境下,替代另一个相同用途的指定软件产品的能力。

5、可移植性依从性:软件遵循与可移植性相关的标准或约定的能力。

关系

如果说软件的设计原则和设计模式是从一个软件的内部来评价一个软件的好坏,那么软件的质量属性就是从软件的外部来评价一个软件的好坏,是一个软件的使用者的角度来评价一个软件好坏的标准。软件的质量属性(尤其是功能性,可靠性,效率和可维护性)决定了架构师采用何种软件架构。软件的质量属性是架构师对外提供的承诺,而软件的设计原则和设计模式是架构师用于保证自己达到对外界的关于质量属性的承诺的手段。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值