灵敏的实现是毒药

精巧的实现是毒药

   精巧的架构是软件之宝,但如果在实现上的精巧则是软件的毒,这种毒会随着软件发展越来越蔓延、发作。


   这几天重构了几处实现上的精巧:

 

1:用编码实现一个数组,如3代表[1,3], 4:[1,3,4], 14[4]。这样做的原因是存数据库的时候好存一个整数。但显然这是一种魔鬼数字。

 

2. 用一个特殊数表示一个组合关系,如year_month==-1,那么这个对象表示是其它对象数据的和。这样做的好处是数据是扁平的,可以放到一个数组里。但显然,在处理这些数据的时候变得复杂,别外当你也要再加入一些层次数据也受限于这种限制。

 

3. 没有显示的声明自动加入到布局系统,如应收款核销实现,绕过了布局系统控制,自动加入了布局。这样造成的后果,我想控制它的出没时反而非常麻烦。两个子系统应该是正交系统,一个子系统不能直接操作别一个子系统的东西。

 


  如果在实现上玩精巧代价是语义不直白,正是软件维护与演进的大敌。《*的程序世界》谈到名字太重要,“如果没有一个好名字,我们不会去做,除非你给我一个好名字”。名字不好,语义不清晰,更重要的是这个事没有想好!