文章目录

  • 软件的设计
    • 设计原则
    • 设计模式
  • 软件的质量属性
    • 定义
    • 关系

软件的设计

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. .NET 云原生架构师训练营(设计原则设计模式)--学习笔记

    ▲ 点击上方"DotNet NB"关注公众号 回复"1"获取开发者路线图 学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第180篇原创文章 ...

  2. 设计原则——设计模式基础

    在讲设计原则之前,我先强制灌输大家一波鸡汤,提倡 面向接口编程,代码的设计更重要的是考虑以后的扩展和可维护性 大家带着这样的思维来学习设计模式以及设计原则,慢慢就意会这波毒鸡汤了. 先声明一点就是老衲 ...

  3. 软件界面设计原则(转)

    一:遵循一致的准则,确立标准并遵循 无论是控件使用,提示信息措辞,还是颜色.窗口布局风格,遵循统一的标准,做到真正的一致. 这样得到的好处: 1:使用户使用起来能够建立起精确的心里模型,使用熟练了一个 ...

  4. 软件设计原则及设计模式

    一. 软件六大设计原则(SOLID) Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitu ...

  5. 软件开发设计思想与6大软件设计原则、23种设计模式目录-设计模式

    目录 1.软件开发设计指导思想: (1)可维护性Maintainability (2)可复用性Reusability (3)可扩展性Extensibility/Scalability (4)灵活性fl ...

  6. Java设计模式第一章(软件设计原则)(学习笔记)

    3.1软件设计原则 为什么要有软件设计原则:在软件开发过程中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率,节约软件开发成 ...

  7. 面向对象设计原则与23种设计模式

    面向对象概述 1.万物皆对象(Java反射原理-都是借助java.lang.class这个对象的属性.定义等实现) 2.面向对象的特征:封装(对象之间的隔离性.对象内部的属性封装).继承(类的重用,耦 ...

  8. 超硬核!!设计模式及设计原则归纳

    为什么要用设计模式 设计模式是对软件设计中普遍存在的各种问题,所提出的解决方案.可以提高项目的维护性(可读性,规范性),高内聚,低耦合,可扩展性,可靠性 单一设计原则 即一个类应该只负责一项职责 降低 ...

  9. 设计模式 -- 面向对象设计原则、黑箱/白箱复用

    1. 面向对象设计原则 – 概述 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. ...

最新文章

  1. 网页性能优化之异步加载js文件
  2. javaScript入门之常用事件
  3. 本地打开extjs api docs 的方法
  4. 解决Linux下vi或vim操作Found a swap file by the name
  5. C# 转繁体转简体转拼音,超级文本大转换
  6. Linux下压缩包生成与解压命令以及进度
  7. python讲解-详解python中@的用法
  8. Vue模板语法---vue工作笔记0003
  9. 关于智能推荐的几点思考
  10. excel文件导出相应数据统计内容
  11. 能够生成动态图片的R模块:rCharts
  12. 中间件 —— 消息中间件(MOM)
  13. python Udp与Tcp
  14. IT 人的国庆大阅兵,太好好好好好好看了吧 ……
  15. javaWeb上传文件(jsp上传文件)
  16. nuxt.js局部引入js获取ip地址
  17. python 移动文件或文件夹操作
  18. BScroll案例--如何确定中间部分的高度
  19. React Native学习笔记(二)---运行开源App,形成直观感受
  20. git 设置单个文件上传大小

热门文章

  1. C\C++ 日志记录
  2. Netflix下载占用了三分之一互联网带宽
  3. 【Python】set集合详解
  4. html学习:关于网页字体的设置
  5. 《计算机教育》专题报道:“米老师”其人
  6. 计算机科学中国大学学术排名,22年1月ESI排名
  7. AI-WEB-1.0
  8. 未接来电暗藏话费陷阱 回拨1次可能扣百元
  9. 苹果ios8_崩溃大陆+饥荒+缺氧的集合元素单机苹果手游,真香还是辣鸡?
  10. MyEclipse字体及颜色的设置