犯错记录(一)

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

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

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

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

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

  很坑爹?是的,我用了接近一个小时去提取需求,整理规划。然而,在真正设计时,我居然忘记了需求。固然,若是从设计角度,这个作法自己并无错误,由于这个类的设计方式,更加符合通常性规则。然而,个人使用前提,应该是在不变动当前已有代码的基础上完成类的修订。测试

  大概有人会说,既然你以为现有的更好,应该让修正已有代码啊。然而,事实上,若是我从新优化现有代码,须要的时间多是一周,在工做上,这多是彻底不容许的。优化

  因此,我大概浪费了2个小时时间,作了2小时之后就删除了的类框架。编码

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

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

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

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

    1,代码看起来更清晰。

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

  一个简单的例子:

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

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

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

  但是,在你根本无法再指定时间内(工做是有时限的)彻底的设计出类时,能够参考此方法。

相关文章
相关标签/搜索