具体设计经验
1.优秀设计六要点[1]可维护性[1.1]可读性[1.2]可扩展性[1.3]易修改[2]稳定性[3]鲁棒性[4]复用性[5]清晰[6]高效
2.软件设计的两个关键点:
[1] 宏观:优秀的架构思想。
[2] 微观:数学能力和算法能力。
3.一种设计思想:对象管理数据。类的作用:组织管理数据的单位。
4.有时行,有时不行[1]跟代码中状态变量有关[2]多线程,多进程。
5.函数是重用的最小单元。
6.软件当前状态<---软件当前在做什么?
7.软件开发问题:版本控制问题,文件兼容问题。
8.从方便找错误角度,设计编写代码。
9.大数据量,偶然出错怎么样查Bug?方法之一:log文件。
10.少做从一堆米中找出一粒炒子的事。
11.尽量保存一份数据.减少数据冗余。
因为计算机本质上就是处理数据。
12.通过使用系统出问题,来认识代码。
13.一个类暴露的接口越少越好。出错的可能就越小。
14.小,直观,就不容易出错.
15.对于烂代码,首先要重构,因为任何对烂代码的修补都是低效的,危险的.
16.混合编程的坏处
如果在项目中要使用大量的c++库。就不要用C#混合编程。大量使用c++库,说明
对于这个项目来说,运行效率是很重要的。使用c#是只加快了开发速度。
采用C#开发软件.表面上加快了开发速度,实际上带来了语言上的复杂性.
程度中用到了许多C++库。C#采用managed C++ 桥接C#和C++。
这是复杂性之一。C#程序很容易被反编译。所以,需要用混淆器混淆exe文件。混淆后的程序可能出现错误,
出现错误后,不好查错。这又增加了开发的复杂程序。而且混淆后,就不能用插件体系了。
17.不要出现异常就“吃掉”,要记录异常并抛出。
18.修改局部,只影响局部,杜绝设计牵一发而动全身的代码。
19.设计大型软件,要着重从易排错角度设计系统。应该拥有强悍的错误处理机制和日志系统。
20.尽量写不带状态的代码。情况之一,尽量写可重入函数。
21.多个工程放在同一个solution的必要条件:各工程互不依赖。
22.读大型源码的方法:
[1] 程序要能跑起来。
[2] 大量的感性认识。可以看看它的数据结构。
[3] 了解功能。
[4] 找到入口。
[5] 摸清程序框架。
找出主要的类--->主要的方法。
用纸来分析代码,将源码的主要结构写在纸上,认清程序的宏观结构。
利用调用堆栈,分析程序调用顺序。
简化,简化,再简化。从宏观上认识程序。
23.“世界上本来没有路,走的人多了,就有有路。”
类的设计方法之一:原来没有父类,各类的共性多了,共性就成了父类。
24.编程,也需灵感。编程,是创造性工作。
25.设计大软件的核心原则之一:以数据为中心的设计原则。
以数据库(数据处理)为核心的设计思想。
26.一个函数只有一个动作。一个类只做一件事。
27.看优秀的源码是提高自身水平的高效方法。
28.黑盒设计思想:客户使用一个类或方法,只关心输入,输出数据。
29.可以通过重构来理解糟糕的代码,一边重构,一边理解代码。在无形中,可能消灭了潜伏的Bug。
即使因重构引入了新的Bug,也很容易修改Bug。
30.涉及类型,多用枚举。
31.程序发布问题:不同机器,不同环境。
32.写文档,可以使思路更清晰
33.控制类的层次数,抑制类的膨胀。
34.可以将方法设计成类。
35.升级问题。
36.拒绝 Shotgun Surgery 霰弹式修改。添加一个小功能。要在整个模块的各个角落添加代码。
这绝对是糟糕的设计。一、测试白做了。二、修改带来了风险。
要把相对稳定的代码和经常变化的代码分开。要集中处理变化。
37. 拒绝Divergent Change 发散式变化。是指一个类受多种变化的影响。
2.软件设计的两个关键点:
[1] 宏观:优秀的架构思想。
[2] 微观:数学能力和算法能力。
3.一种设计思想:对象管理数据。类的作用:组织管理数据的单位。
4.有时行,有时不行[1]跟代码中状态变量有关[2]多线程,多进程。
5.函数是重用的最小单元。
6.软件当前状态<---软件当前在做什么?
7.软件开发问题:版本控制问题,文件兼容问题。
8.从方便找错误角度,设计编写代码。
9.大数据量,偶然出错怎么样查Bug?方法之一:log文件。
10.少做从一堆米中找出一粒炒子的事。
11.尽量保存一份数据.减少数据冗余。
因为计算机本质上就是处理数据。
12.通过使用系统出问题,来认识代码。
13.一个类暴露的接口越少越好。出错的可能就越小。
14.小,直观,就不容易出错.
15.对于烂代码,首先要重构,因为任何对烂代码的修补都是低效的,危险的.
16.混合编程的坏处
如果在项目中要使用大量的c++库。就不要用C#混合编程。大量使用c++库,说明
对于这个项目来说,运行效率是很重要的。使用c#是只加快了开发速度。
采用C#开发软件.表面上加快了开发速度,实际上带来了语言上的复杂性.
程度中用到了许多C++库。C#采用managed C++ 桥接C#和C++。
这是复杂性之一。C#程序很容易被反编译。所以,需要用混淆器混淆exe文件。混淆后的程序可能出现错误,
出现错误后,不好查错。这又增加了开发的复杂程序。而且混淆后,就不能用插件体系了。
17.不要出现异常就“吃掉”,要记录异常并抛出。
18.修改局部,只影响局部,杜绝设计牵一发而动全身的代码。
19.设计大型软件,要着重从易排错角度设计系统。应该拥有强悍的错误处理机制和日志系统。
20.尽量写不带状态的代码。情况之一,尽量写可重入函数。
21.多个工程放在同一个solution的必要条件:各工程互不依赖。
22.读大型源码的方法:
[1] 程序要能跑起来。
[2] 大量的感性认识。可以看看它的数据结构。
[3] 了解功能。
[4] 找到入口。
[5] 摸清程序框架。
找出主要的类--->主要的方法。
用纸来分析代码,将源码的主要结构写在纸上,认清程序的宏观结构。
利用调用堆栈,分析程序调用顺序。
简化,简化,再简化。从宏观上认识程序。
23.“世界上本来没有路,走的人多了,就有有路。”
类的设计方法之一:原来没有父类,各类的共性多了,共性就成了父类。
24.编程,也需灵感。编程,是创造性工作。
25.设计大软件的核心原则之一:以数据为中心的设计原则。
以数据库(数据处理)为核心的设计思想。
26.一个函数只有一个动作。一个类只做一件事。
27.看优秀的源码是提高自身水平的高效方法。
28.黑盒设计思想:客户使用一个类或方法,只关心输入,输出数据。
29.可以通过重构来理解糟糕的代码,一边重构,一边理解代码。在无形中,可能消灭了潜伏的Bug。
即使因重构引入了新的Bug,也很容易修改Bug。
30.涉及类型,多用枚举。
31.程序发布问题:不同机器,不同环境。
32.写文档,可以使思路更清晰
33.控制类的层次数,抑制类的膨胀。
34.可以将方法设计成类。
35.升级问题。
36.拒绝 Shotgun Surgery 霰弹式修改。添加一个小功能。要在整个模块的各个角落添加代码。
这绝对是糟糕的设计。一、测试白做了。二、修改带来了风险。
要把相对稳定的代码和经常变化的代码分开。要集中处理变化。
37. 拒绝Divergent Change 发散式变化。是指一个类受多种变化的影响。
浙公网安备 33010602011771号