【闻缺陷则喜】避错设计

简介: 【闻缺陷则喜】避错设计

同型原理

同型原理指保持形式统一。统一不同人风格很难,同一个人急躁的时候和轻松的时候风格都不一样,何况不同的人。统一的内容包括但不限于:


统一的命名规则。

利用接口和适配器统一诸多类似算法。CDC系统的算法主要有:瑕疵检测、寻找极耳、寻找Mark孔,宽幅测量等,每种算法因为要检测的材料不同,有细微区别。可以统一成接口:输入图像,输出json串。

统一的文件格式,如:日志文件。

简化问题,问题有多个解。选择一个较优解。比如:命名管道,可以多个进程有同名管道的服务端和客户端,但限制每个管道只有一个进程有服务端,就可以满足实际需要。

出参在前,入参在后。

三种编程命名规则


一、匈牙利命名:开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写。


二、骆驼式命名法。变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写。


三、大驼峰法(即帕斯卡命名法)把第一个单词的首字母也大写了。常用于类名,命名空间等。


对称原理

对称原理指的是保持形式的对称。包括但不限于:


分析时:输入有范围要求时,不仅要写出合法输入的处理流程,也要写出非法输入的流程。


设计时:切勿忽视异常设计,正确区分“客户、用户”。


控制逻辑的“真/假”,执行路径“通/不通”,控制条件“满足/不满足”,系统工作状态的“正常/异常”,处理结果的“异常/成功/失败”,线程、进程的“空闲、阻塞”,通信系统的“服务端、客户端”,文件、内存文件、命名管道的“读、写”,消息的“收/发”。


编程时:如果if else没有成对出现要,要考虑是否缺少else。switch语句每个分支是否需要、且有break,最后不要忘记default。


层次原理

指的是系统可以分为子系统,子系统可以分为孙系统,孙系统可以拆分成模块,模块可以拆分子模块,子模块可以拆分成语句。


线性原理

指某个系统、组件、模块可以用线性描叙,最多用矩阵描述。主要包括三点:一,禁用GoTo。二,尽量减少使用分支,比如用注册接口的方式代替分支。三,复杂部分拆分到一个函数中。


清晰原理

能清晰证明自身的正确性。包括:一,尽量使用清晰的方式,不用为了性能或炫耀而用一些不常规的方式。二,尽量使用规范、标准、习惯等团队大家都知道的东西。三,对于核心部分,使用形式化证明。


安全原理

防止意外和恶意破坏。包括如下四个措施:一,调用底层功能时,获取异常或错误信息。二,尽量少分配权限,只分配必要的权限。三,完善的日志系统。四,如果使用C语言,不会修改的对象和变量可以使用const。


相关文章
|
XML 数据格式
[闻缺陷则喜]关于boost的想法
[闻缺陷则喜]关于boost的想法
|
9月前
|
存储 索引
日拱一卒,月进一步(1)
思路2: 哈希表(暂时还没有学,所以先开个坑位,以后来填补)
81 1
|
9月前
日拱一卒,月进一步(2)
那么,很快就来到了第二题的学习。哈哈~ 26. 删除有序数组中的重复项 - 力扣(LeetCode)
64 1
|
9月前
日拱一卒,月进一步(13)
500. 键盘行 - 力扣(LeetCode) 好难啊!!!
48 1
|
9月前
|
算法
日拱一卒,月进一步(8)
136. 只出现一次的数字 - 力扣(LeetCode) 这个题目一出现,我就立马有了思路。其实就是让每个数字互相异或,最后得出的数字就是只出现一次的数字。
56 1
|
9月前
日拱一卒,月进一步(14)
561. 数组拆分 - 力扣(LeetCode) 快排并从第一位开始隔位取数字
54 1
|
9月前
|
索引
日拱一卒,月进一步(11)
414. 第三大的数 - 力扣(LeetCode)
60 1
|
9月前
日拱一卒,月进一步(4)
66. 加一 - 力扣(LeetCode) 思路: 数字加法应该从前向后遍历,因此我们应该从数字末尾从后向前遍历。如果数字不为9,则直接在末尾+1。如果末尾为9,那么将其变为0,并且在下一位+1。如果一直遍历都为1,那么在数组第0位插入1。
47 1
|
9月前
日拱一卒,月进一步(15)
598. 区间加法 II - 力扣(LeetCode) 首先明白题目的含义:mn表示的是一个矩阵,初始化为0。再依次在满足条件的矩形内+1,最后找出最大数字的个数。我们只需要找到最小的长和宽即可。
66 1

相关实验场景

更多