关于软件设计

目标

编码常见问题

https://time.geekbang.org/column/intro/100052601?code=u3c5Yd1wi7RMITQlibDv%2F1MmwKzXWv1yB63-HuUDXtI%3D

软件设计的本质

设计是为了让软件在长期更容易适应变化。 — Kent Beck

软件设计的优劣在根本上决定了软件系统的质量。好的设计,可以让系统更容易修改和扩展,不好的设计,却会让人举步维艰

软件设计是一门关注长期变化的学问。一个模块应该有且仅有一个变化的原因。一个模块最理想的状态是不改变,其次是少改变,它可以成为一个模块设计好坏的衡量标准

软件设计对抗的是需求的规模

消除重复,也是软件设计的初衷 程序库 标准库 第三方库 包管理器

到底什么是软件设计?是具体技术实现?是框架和中间件?是设计模式?……

软件设计要关注长期变化,需要应对的是需求规模的膨胀,而上面这些提到的误解则都是不断在变的东西,没有直击问题本质。

软件设计其实是在软件开发过程中,建立起一个统一的结构,便于参与这个过程的所有人都能有一个共同的理解,类似于建筑图纸。

而这个统一的结构,我们可以将其理解为一个模型,它是一个软件的骨架,是一个软件之所以是这个软件的核心

模型的粒度可大可小,小到可以是一个类(class),也可以大到一个系统(system)

软件设计=模型+规范。https://cloud.tencent.com/developer/article/1770330?from=article.detail.1779958

主流的编程范式

结构化编程、面向对象和函数式编程

面向对象的主流设计原则

SOLID原则:出自 Robert Martin 的著作《敏捷软件开发:原则、模式与实践》和《架构整洁之道》,他在这两本书对SOLID原则进行了完整的阐述。

设计模式

关注点分离

KISS 原则

YAGI原则(You aren’t gonna need it)

DRY原则(Don’t repeat yourself)

高内聚,低耦合

简单设计(Simple Design)原则

  1. 通过所有测试;
  2. 消除重复;
  3. 表达出程序员的意图;PS:代码要说明做什么,而不是怎么做。
  4. 让类和方法的数量最小化。

最小的核心模型

一个好的设计,应该找到一个最小的核心模型,所有其他的内容都是在这个核心模型上生长出来的,越小的模型越容易理解,相对地,也越容易保持稳定。比如设计一个http mock服务器,其核心模型为server.request("foo").response("bar"); 一方面表达出预期;另一方面给出返回的结果。

所谓模型,它也被称之为抽象,它是软件的核心内容,理解模型就可以帮助我们从高维度建立对软件的整体认知。比如,DI依赖注入是一种模型解决了组件创建和组装的问题,MapReduce也是一种模型解决了分布式计算中节点分发和调度的问题

软件设计的流程

软件设计的第一步:分离关注点

需求分析,多多关注非功能性需求 –》 拆解出模块

了解一个软件的流程

看源代码是了解软件设计的必经之路,但却不是第一步。

郑晔老师说道,了解一个软件的设计,可以从三个部分着手,它们是:模型、接口和实现

软件设计之美课程大纲

imgAPI在软件设计中的地位是什么?

参考软件框架设计的艺术 https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1%E7%9A%84%E8%89%BA%E6%9C%AF

Ref

https://cloud.tencent.com/developer/article/1770330?from=article.detail.1779958

Powered by Jekyll and Theme by solid

本站总访问量