封装三:面向原子(0BUG的保障)

我们再想象一下:围棋的棋盘

上面有很多个小方块,我们把程序的所有功能点都看成小方块,而BUG则是小方块上的脏点;

如果你能保证每个小方块上都没有小黑点,并且保证每个小方块的衔接是正确的,那么你就可以保证你的程序没有BUG;

 

面向原子,就是说我们将程序的每个功能点设计为没有小黑点的简单原子小方块

 

前两两篇都有提到“尽可能简单独立”;任何一个“简单独立的功能”我称之原子;将所有的功能都设计为原子功能,然后象搭积木一样搭建你的程序;

 

前面也提到:01->汇编->c -> c++ ....一层一层的进化,一层一层的封装;如果你的所有功能都是以个原子,那么它将在以后自然的被重用;

我非常欣赏STL的算法模块,功能独立到无可精简,我工作中同样设计了大量这种独立的功能;

工作中有同事发现同时实现一个简单的测试程序,我可以在10分钟之内搞定,而有些同事则得花上一个小时甚至更久,那就是因为我有大量的这种原子性的功能,简单的测试程序则是简单的搭积木一样;

 

面向原子,个人认为最明显的特征是:BUG很少,甚至无BUG(我知道这句话会引来很多人嗤之以鼻),下面我来解释一下;

 

首先:你设计一个简单的功能,你可以保证无BUG吗?比如:vector foreach  仅仅几行代码而已;我相信绝大多数人可以做到,而且可以拍胸脯绝无BUG;

 

再复杂一点的功能我们可以用foreach这类简单的功能搭建而成;如果你能保证foreach1,无bug,那么你肯定可以保证foreach2,foreach3无BUG;以此类推;假如某功能是:

 

void do_something()  // 保证dosomething的原子性;

{

    foreache1(...);

    foreache2(...);

    foreache3(...);

}

 

同样你可以保证无BUG

 

再用do_something去搭建更强的原子性功能时,依旧不会有BUG;

 

其中非常关键的一点在于:如何设计你的原子;这需要一定的经验,有一条可以遵循的是:原子的语义必须非常明确,简洁(前面的文章已经提过)

 

在写这篇文章之前,我花了不到一周时间写了以个memcache,之所以能这么快,是因为:1:我有LRU-cache;2:我有alloc;3:我哟tcp-server/client;4:我有分布式分发module;  所有我需要做的是将这些独立的功能组装起来;我的cache即完成了;我仅做了很简单的测试;便接入的公司正式运营的产品中;目前没人报BUG

 

回到围棋的小方块,让方块上没有黑点,则可以用单元测试保证,让小方块衔接正常则是通过集成测试保证;当你的单元测试通过后,你的小方块可以放入你自己的lib代码里,永恒!当你将多个小方块绑在一起成为一个更强的大方块时,同样可以放入你的lib继续永恒!此大方块将在另外一个更大的方块中作为一个小方块!

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值