软件开发与项目管理易理——简单与灵活

是故百战百胜,非善之善者也;不战而屈人之兵,善之善者也。 ——《孙子兵法·谋攻篇》

 

一场战役,以多胜少与以少胜多相比,后者更为胜。

 

软件开发犹如一场战役,投入的资源好比是兵马,所要开发的软件好比是要打的一场战。软件规模越大,战役的范围也就越大,时间也就越长。

 

考虑一个通信协议软件,从上至上包括应用层、封包层、通信层,其实现应用消息收发,令这三层的核心处理函数分别为A(msg), B(msg), C(msg)

 

可以采用简单的实现方法:

 

A(msg)

{

    B(msg)

    {

        C(msg);

    }

}

 

即:用户只需将应用消息传入应用层,自动一层层组包并发送;对于从外部设备收到的消息反向处理即可。这种方法的不足之处是各层之间紧耦合,例如在没有封包层的应用中,需要修改核心代码。这时可以考虑采用以下方法:

 

也可以采用

 

应用层和封包层之间采用消息队列MQ1,以及封包层和通信层之间采用消息队列MQ2,这样可以实现协议层之间的松耦合。这时的实现方法为:

 

A(msg);

get msg from MQ1;

B(msg);

get msg from MQ2;

C(msg);

 

对于从外部设备收到的消息反向处理即可。

 

协议的灵活性以增加额外的消息队列为代价,其不足如下:

 

1. 增加了代码量,开发周期变长

2. 容易引入更多的错误

3. 维护成本变高

4. 需要对更多的错误进行防护

5. 增加了测试工作量

6. 在冗余(例如双机热备)系统中,主备间需要同步更多的内容,稳定性变低

 

在简单与灵活性的考虑上,需要权衡灵活性所带来的负面影响,然后再决定战役规模,“不战而屈人之兵”方为上策。

 

[未经作者许可 不得转载]

你可能感兴趣的:(杂记)