代码大全(读书笔记)

2021.06.27 开始阅读此书,这篇文章记录了一些读此书或者这款时间工作生活的一些心路,希望自己能持续从此受益。


2021.08.05 此次阅读的关注点在第 3/5/6/7/12/13 章


我虽然是计算机行业从业者,但本身不是计算机专业出身,很惭愧没能更早的耳濡目染更多基础但不可忽略的知识,虽此行业已被很多其他行业从业者开始逐步进入,但私以为最基本的素养不应该被降低,也因此不断提醒和鞭策自己,学习是一件不得不做且应该去做的事。—2021.06.27


2021.08.13 理想的设计特征


2021.08.20 设计的层次

文章目录

  • 代码大全(读书笔记)
    • welcome to software construction
      • 软件开发的过程
      • 需求的先决条件
      • 架构的先决条件
    • Key design concepts 关键设计概念
      • desirable characteristics of design 理想设计特征
      • levels of design 设计的层次

welcome to software construction

软件开发的过程

  • 定义问题
  • 需求分析
  • 规划构建
  • 软件架构或 high-level design
  • 详细设计
  • 编码与测试
  • 单元测试
  • 集成测试
  • 集成
  • 系统测试
  • 保障维护

大部分公司其实都是「序列开发法」和「迭代式开发法」的混合,而绝大多数更侧重于前者。

references:

敏捷开发学习总结(1):传统序列式软件开发方法的缺点,以及迭代开发方法的选择

需求的先决条件

一个 Objective 不够明确,看起来非常高大上,但实际上没有可量化的指标,回头想跟这里需求分析一样,需要明确的需求其实是一个项目良好的开端。

关于需求变更:不管是 toB 还是 toC 都无法避免需求变更,该书提醒我们有必要在变更频繁时:建立变更控制程序,使用能够适应变更的开发方法,当然有必要时也要放弃一个不合理的项目。

  • 适应变更的开发方法更详细的是什么?

架构的先决条件

最终方案确定时,一个关键步骤是记录下摒弃其他方案的理由是什么,而最终方案不可替代的原因又是什么。

架构的典型组成成分如下:

部分顺序没有遵循原书中的设计,我自己也加入了一些个人观点,并对一些方面进行了合并和删减

  1. program organization
  • 架构应该定义程序的主要构造块,根据程序规模不同,各个 building block 可能是单个类也可能是许多类组成的子系统。同时应该提前考虑好构造块直接如何进行通信。
  1. major classes
  • 指明每个类的责任、继承体系、状态转换、对象持久化的描述
  • 类和其他类怎么交互

个人觉得这是一个很重要的步骤,有利于对项目抽丝剥茧

  1. data design

这里很关键的一步是:

数据通常只应该由一个子系统或者一个类直接访问:以受控且抽象的方式来访问数据。

  1. business rules 业务规则
  2. resource management

资源管理在 backend 架构设计中是经常需要考虑的一个方面,包括数据库连接、线程、Redis 等。
6. security

这也是一个很重要的方面,涉及到用户输入数据的安全性,怎么防御 xss、csrf 等,以及 sql 注入等常见的安全隐患

  1. input/output 输入与输出 error processing 统一的错误处理 fault tolerance 容错性

在错误处理中需考虑到向用户吐露哪些错误信息是清晰的,同时需要考虑暴露错误栈的合理性。
7. user interface design 用户界面设计 与 internationalization 即 i18n 国际化
8. scalability 可伸缩性 interoperability 互用性 Reuse Decisions 复用决策 change strategy 灵活变更的策略

目前的开发经验中,对于这几点除非在做架构设计之前已经有类似的需求背景,那么在复用性上的考虑可能会相对局限,但注意这仅仅针对整体架构。对于子结构而言考虑 interoperability 是很有意义且必须做的一件事。


Key design concepts 关键设计概念

desirable characteristics of design 理想设计特征

  1. 最小的复杂度:简单易于理解
  2. 易于维护
  3. 松散耦合:设计出相互关联尽可能最少的类。
  4. 可扩展性:增强系统功能但不破坏底层结构
  5. 可重用性
  6. 高扇入 high fan-in:大量的类使用某个给定的类,utils
  7. 低扇出 low fan-oout:让一个类少使用其他的类
  8. 可移植性、精简性、层次性、标准技术

levels of design 设计的层次

关于子系统:

为了让子系统之间的连接简单易懂且易于维护,应该尽量简化子系统之间的交互关系。(就是不要牵一发而动全身)

最简单的交互关系是:让一个子系统去调用另一个子系统中的子程序。

稍复杂的交互关系是:在一个子系统中包含另一个子系统的类;

最复杂的交互关系是让一个子系统中的类继承自另一个子系统中的类。

代码大全(读书笔记)相关推荐

  1. JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记3

    技术非常多,样例非常多.仅仅好慢慢学,慢慢实践!!如今学的这本书是[JavaScript实战----JavaScript.jQuery.HTML5.Node.js实例大全] JavaScript.jQ ...

  2. JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记2

    技术很多,例子很多,只好慢慢学,慢慢实践!!现在学的这本书是[JavaScript实战----JavaScript.jQuery.HTML5.Node.js实例大全] JavaScript.jQuer ...

  3. 简单使用Git和Github来管理自己的代码和读书笔记

    简单使用Git和Github来管理自己的代码和读书笔记 以前不知道使用代码管理工具,最后写的一些东西都没有了,由于硬盘坏了或者不小心格式化了之类的,后来使用了Git 和Github来托管自己的代码和读 ...

  4. 第一行代码 Android读书笔记(二)

    第一行代码 Android读书笔记 第三章 软件也要拼脸蛋-UI开发的点点滴滴 常用控件的使用方法 详解4种基本布局 自定义控件 最常用和最难用的控件-ListView 更加强大的滚动控件-Recyc ...

  5. 《第一行代码》读书笔记(七):album爬坑

    <第一行代码>读书笔记(七):album爬坑 权限问题 尽管书中提到4.4系统之前需要声明访问SD卡权限,不过很遗憾,4.4系统之后仍然需要 照片不显示问题 Android10对文件访问权 ...

  6. 《梦断代码》读书笔记——第3、4、5章

    只觉得这段时间事儿太多了,本应该周五就应该写的读书笔记一直拖到今天. 读完这几章,我主要收获了以下几点:计算机编程语言的发展由低级语言到高级语言,高级语言是在低级语言的基础上发展起来的,低级语言不应该 ...

  7. 代码大全阅读笔记02

    第二部分:创建高质量的代码 第一部分主要介绍了开发过程和需求分析,强调了构建的重要性,可以说十介绍了技术层面的一些东西.第二部分把目光放到了更加细节的地方,也开始看到了一些代码.内容十分全面,也写了很 ...

  8. 《梦断代码》读书笔记

    梦断代码,英文名是DREAM IN DODE.梦断代码,原作是美国的Scott Rosenberg,经韩磊翻译而来. 为什么选择读这本书?在图书馆软件工程处翻阅时,被这本书的名字吸引住了,同时之前也听 ...

  9. Linux命令行与Shell脚本编程大全读书笔记

    Linux内核4大主要功能: 内存管理 进程管理 设备管理 文件系统管理 Linux系统启动的进程和脚本管理 1./etc/inittab   管理系统开机时会自动启动的进程 2./etc/init. ...

  10. 《梦断代码》读书笔记1

    刚开始看到书名时,我感觉这个名字非常好,梦断代码,代码是我们每个学习计算机同学的噩梦,有多少人是讨厌当码农的.怀着好奇的心情,开启了我这本书的阅读旅程. 首先看到的是CSDN的总裁和Discuz创始人 ...

最新文章

  1. flask项目中无法更改端口号
  2. LINUX ModuleNotFoundError: No module named 'XX'
  3. ML之DT:基于DT决策树算法(对比是否经特征筛选FS处理)对Titanic(泰坦尼克号)数据集进行二分类预测
  4. python基础案例教程_python基础教程 10-11例子如何执行
  5. 密度图的密度估计_箱形图、小提琴图、直方图……统统可以卡通化!
  6. mt19937 -- 高质量随机数
  7. [剑指offer]面试题28:字符串的排列
  8. 亮度 调整_摄影后期必备!如何用亮度蒙版技术精准调整照片影调
  9. VC/MFC中的CComboBox控件使用详解
  10. AE效果:3D 通道
  11. java可视化tiff转pdf工具
  12. vue+d3实现横向树状图(节点使用矩形图展示信息)
  13. 微信连wifi3.1总结
  14. Codeforces 802 补题
  15. zabbix实现对mysql数据库的监控
  16. 据说Kivy可以将Python程序弄成App来玩,所以 安装Kivy。关于安装Kivy失败后的解决方案过程
  17. (附源码)计算机毕业设计SSM基于web的网上订餐系统
  18. DP2515国产带SPI接口汽车CAN总线控制器芯片兼容替代MCP2515/MCP2515-I/ST
  19. 北京冬奥村:让科技蕴含温度
  20. 我的STM32入门经验

热门文章

  1. 第七季“创新之源”大会成功举办
  2. 关于语料库中OOV未登录词的处理方式
  3. 比程序员更好的职业_立即成为更好的程序员的20条技巧
  4. rxswift 网络请求_使用RxSwift将身份验证请求链接到多个服务
  5. 第六届 虚拟漫游 题目
  6. 查看xgboost版本
  7. 分布式大数据多维分析引擎:Kylin 在百度地图的实践
  8. 一文看懂VPS、原生IP、住宅IP有什么不同
  9. 黑马程序员--Objective-C之--自动释放池的概念以及使用
  10. Android系统Camera图片反转的一个问题