幽默:简单几点说明日常编程中的软件设计或程序设计

21-06-27 banq
软件设计或程序设计不只是算法设计,还有模式结构的设计,体现在:
  •  - 将模块分组到架构层是设计。
  •  - 将类分组为模块是设计。
  •  - 将函数分组为类是设计。
  •  - 重命名变量是设计。

设计和用户体验有很多共同之处。很容易发现两种工艺共有的特征。
虽然这些编程动作非常简单常见,都属于一种常见的抽象设计,但是如何分组分类抽象就很复杂了,关键坚持上下文>抽象:DDD和OO的重要区别:上下文重于抽象
当前编程上下文的设计重点还是注重可读性(代码可读性举例),而不是抽象或重用,过早抽象优化是邪恶的,因为你无法预测未来,以及抽象的角度是否切合需求本身的变化,而且抽象会去除一些你以为不重要的细节,结果以后这些细节反而是重点。
案例:表单提交到后端有一些简单检查:表单内容不能为空和内容长度不能太长
一般检查顺序是先检查是否为空,然后检查长度是否太长,这种分类规则是自然的,不能先检查长度,因为内容为空是首选。
但是在是否为空检查中,有一种删除各种非字字符操作,如果删除非字符的符号以后还是为空,也判断为空,这里面涉及到对内容内部进行正则寻找替换,如果这个内容文本非常巨大,替换需要很长时间,以至于客户端等待过长主动中断连接,这就很容易把问题误导到http连接上。
其实错误在于分类的依据出现问题,删除非字符串的检查为空应该放在长度不能过长的检查之后,这样顺序是:
  1. 检查是否为空,
  2. 检查内容长度是否过长,
  3. 检查内容中去除非字符串以后是否为空。


你不能将第三步和第一步因为都属于检查为空这个共同性而分类在一起,这个寻找共同性的依据是主观武断的,没有考虑性能等问题,其实更好分类思路是:
  1. 首先从事物外部检查,
  2. 然后从事物对象内部检查


这个抽象角度更高更好,但是一开始你是不可能想到的。过早抽象并不好。

2