- 论坛徽章:
- 8
|
pandaiam 发表于 2013-06-07 15:36
确实,分层很重要.
最后一个例子,感觉很好啊...
例子没举好……因为不习惯那种拉拉杂杂的说话方式,也懒得敲那么多字。
我的意思是,一个模块就应该是一个独立的实体;其它模块和它的关系,就应该像驾驶员和汽车一样。
对模块来说,“操纵杆/方向盘”就是它的接口;“仪表盘”则是它的返回信息。
好的文档,应该专注于描述接口和返回信息,以及它们的使用方式。而不应该去罗嗦什么“当你挂2档时,齿轮F1和齿轮H3分离,轴S5移动到Z2位置,使得齿轮R6和齿轮U7结合,于是传动比变成了XX:1,实现了挂档功能”;尤其是,不能再去指挥驾驶员“在齿轮L6磨损打滑时,应如何如何”。
这种东西,除非汽车工程师,否则没人能看懂;即便看懂了,这丫也肯定开不了汽车——他还没琢磨透“现在该接合齿轮R6和U7呢,还是转动凸盘Y9,分离离合器盘”呢。
——这就叫重耦合。
当然,没这么傻的汽车说明书;但这么傻的程序员,那可是比比皆是。
而且,照这种东西写程序,可比驾驶员和汽车恐怖得太多太多。因为首先功能的边界都搞不清。
于是乎,一个东西,似乎A应该负责,但推给B也不能算错——后果吗,对某功能,要么A/B各自都做了一份(做两次某些时候可是致命的!);要么A/B都没理;要么,A做了个73%,B做了47%:其中,16%的交集部分被做了两次;A方实现的54%和B方实现的25%互不兼容;另外还有20%的内容两边都没做——而且,再让A或B做,人家都不肯,因为会破坏他们的已有抽象!!
这种系统,肯定是越改BUG越多。最后凑合勉强能用已经很不容易了,就别再提任何“过分”的要求了。
反过来呢?
设计一个“档位”接口,用于改变传动比。其中1档为...如果挂档不成功,则回到空档状态。
有了这样的接口,这样的说明,无论是工程师还是驾驶员,还可能做错吗? |
|