前段时间对一个博客进行设计,在关于封装查询语句的函数上面做一个错误的决定,那就是过度设计,原因是这样滴:
因为需求没有完全弄明白,也不知道以后会不会添加别的查询判断语句,所以在函数的参数,返回值等方面抉择的类型为不定型interface{}也就是C的(void*),当时是这样想滴:以后就算修改了,或添加了查询条件语句也没关系,因为参数为不定型,所以函数调用的时候没有任何的影响,只在函数内部进行修改就可以了。
但是但是,,,,,,,
事实证明决策是错误的。
分为四种情况:
1. 以后确定不会改变。
2. 以后应该不会改变。
3.以后 不确定会不会改变。
4.以后应该会改变。
第一种情况下,不用多说,代码硬写就可以了,不用考虑灵活性(扩展性?)。
第二,三种情况下,比较难把握,以前有个误区也在这里,也是大部分人经常的错误所在:选择为以后的扩展做努力。可以展现技术水平嘛,但事实正确的做法是:在这种情况下应该去假设以后不会改变去做设计,为什么呐?原因在于,未来的可变性太多,就算是现在去做了很复杂的去适应未来,到未来到来的时候,大部分设计都会失败的。二点是:简单的实现,会节省时间,减少bug,代码清晰等各种好处。但是为什么好多人大部分都会选择过度设计呐:因为可以满足技术欲望,程序员的通病啊。
第三种情况下,毋庸置疑要选择考虑扩展性的设计啦。