您的位置:首页 > 其它

算法设计应该依赖抽象而不是业务

2007-04-22 10:54 162 查看
很多时候,算法的设计是归属于详细设计阶段的。一些公司甚至都没有设计而直接编码。这些往往导致很多算法的实现都混杂在业务模块中。典型的特点是,这些算法会依赖于业务实体的某些属性的实现。
举一个简单的例子,我曾经做过一个项目中,遇到一个排序功能:分部整理。这个排序比我们以往所学的排序不一样,所以很多人都不将它作为算法来看待,而是直接做为业务逻辑功能进行实现。

排序的基础数据是清单(一个业务实体)的编码

排序的依据是清单编码在检索库中的顺序

如果你细心的话,就会发现,其实上面的两条,和我们的一般排序方法实现起来是一样的!

比较对象:字符串、整数、浮点数等等

比较方法:比较大小、大小写敏感等等

根据上面的分析,设计这个算法的过程中,应该将清单编码列表作为一个参数传入。注意,这里是是编码列表,而不是实体对象列表。最好的情况是,重新声明一个数组。这样就能将算法和业务实体隔离开。另外,清点编码的检索作为一个排序的比较回调函数。这样,比较的业务也可以和算法分开。最后,算法其实也不需要实现了,因为这是通用的。




大家一定注意到了,上面的设计过程中,一直在强调接口编程。我们的算法如果不依赖于业务,就必须提取出来一个独立的接口。说到接口,我想多说几句,因为很多人在这里有一个误区。
我们在业务代码中,有很多接口。这些接口一般都是业务接口。是因为业务而不得不存在的接口。但是写得多了,很多人可能会将这些和我们所提倡的独立的接口想混淆。让他依赖接口编程,他就直接将业务对象实现的接口引入进来。这种方法的直接后果就是,这部分代码,别的地方不可能再用了!
依赖于业务抽象的算法实现,是有很多好处的:

算法简洁、易于阅读

层次清楚、易于扩充

抽象独立、易于复用

对于服用,不光是可以给别人服用,很多时候,就是因为抽象的好,因而可以使用到一些基础算法。复用代码的好处,就是不需要额外的维护啊。
算法设计,是应该高于业务设计的。这样才能体现算法的优势。否则石头一旦沉入大海,我们再也不能看清楚他们了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐