• 犯错记录(一)


      1,需求明确,却在实现的过程中遗忘。

      上周五完成预计任务后,期望对整个代码进行优化。首先选择一个解析JSON的功能。最初的需求其中是2个:更轻松的使用 和 出现中小性质变动时不需要对代码进行修改。后者,相对而言比前者更加重要。

      对于这个解析器设计,我零散的做过很多预想,中间也提取过各类需求。但,在整理需求时,我出现了一个错误:设计类就遗忘了需求。像我上面所说的,我的期望是使用和未来的少变动。但实际上,我在设计的最初,也是依据这2个目标去完成的,设计了一个类似下面的类

    class A{
        public:
            virtual usingA();
            virtual GetValue();
    };
    

      看起来应该是正确的,结果呢?。。。竟然发现无法直接用于已有代码中。

      很坑爹?是的,我用了接近一个小时去提取需求,整理规划。然而,在真正设计时,我竟然忘记了需求。当然,如果从设计角度,这个做法本身并没有错误,因为这个类的设计方式,更加符合一般性规则。然而,我的使用前提,应该是在不变更当前已有代码的基础上完成类的修订。

      大概有人会说,既然你觉得现有的更好,应该让修正已有代码啊。然而,事实上,如果我重新优化现有代码,需要的时间可能是一周,在工作上,这可能是完全不允许的。

      所以,我大概浪费了2个小时时间,做了2小时以后就删除了的类框架。

      2,在实现之前,应该使用类对象模拟使用。

      上述例子中有一个幸运在于,这个类的实现使用了大部分已有的代码和工具类,所以实现的过程大略半小时就完成了一半。此时,在测试时,才发现原来设计的东西无法使用。《代码大全》中描述,越早发现问题,修复的成本越低。

      实际上,我正在尝试一种编码习惯:设计完类后,先将其放入适用场景去使用,看是否能够符合要求。

      这个规范其实可以更延伸一些:当实现一个复杂功能函数时,直接在其中使用未完成子程序(甚至未声明和设计)。这样的好处有:

        1,代码看起来更清晰。

        2,复杂功能的函数代码不会过长。

      一个简单的例子:

    放大象到冰箱(){
        打开冰箱(手);
        放入物品到冰箱(手,大象);
        关闭冰箱(手);
    }
    

      这种方式有一个好处:在你没有非常清晰的函数需求,参数需求时。你可以通过编程中渐渐清晰。例如此例,你最少知道需要这样3个函数,和2个形参(或成员变量)。

      但,这种方式从本质上,并不适合用来设计类,因为它是从指向性需求来规划类的。而类的设计应该是抽象的概念。

      可是,在你根本没法再指定时间内(工作是有时限的)完全的设计出类时,可以参考此方法。

  • 相关阅读:
    无重复字符的最长子串
    有效的括号
    最长公共前缀
    罗马数字转整数
    Android解析JSON数据异步加载新闻图片
    回文数
    Java从Json获得数据的四种方式
    JavaMD5加密工具类
    div模仿select效果二:带搜索框
    BG雪碧图制作要求
  • 原文地址:https://www.cnblogs.com/zheng39562/p/4540110.html
Copyright © 2020-2023  润新知