科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道[韩小明]算法设计应该依赖抽象而不是业务

[韩小明]算法设计应该依赖抽象而不是业务

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

算法设计,是应该高于业务设计的。这样才能体现算法的优势。否则石头一旦沉入大海,我们再也不能看清楚他们了。

作者:韩小明 来源:CSDN 2007年10月10日

关键字: 韩小明 算法 抽象 业务

  • 评论
  • 分享微博
  • 分享邮件

很多时候,算法的设计是归属于详细设计阶段的。一些公司甚至都没有设计而直接编码。这些往往导致很多算法的实现都混杂在业务模块中。典型的特点是,这些算法会依赖于业务实体的某些属性的实现。

举一个简单的例子,我曾经做过一个项目中,遇到一个排序功能:分部整理。这个排序比我们以往所学的排序不一样,所以很多人都不将它作为算法来看待,而是直接做为业务逻辑功能进行实现。

  1. 排序的基础数据是清单(一个业务实体)的编码
  2. 排序的依据是清单编码在检索库中的顺序

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

  1. 比较对象:字符串、整数、浮点数等等
  2. 比较方法:比较大小、大小写敏感等等

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

大家一定注意到了,上面的设计过程中,一直在强调接口编程。我们的算法如果不依赖于业务,就必须提取出来一个独立的接口。说到接口,我想多说几句,因为很多人在这里有一个误区。

我们在业务代码中,有很多接口。这些接口一般都是业务接口。是因为业务而不得不存在的接口。但是写得多了,很多人可能会将这些和我们所提倡的独立的接口想混淆。让他依赖接口编程,他就直接将业务对象实现的接口引入进来。这种方法的直接后果就是,这部分代码,别的地方不可能再用了!

依赖于业务抽象的算法实现,是有很多好处的:

  1. 算法简洁、易于阅读
  2. 层次清楚、易于扩充
  3. 抽象独立、易于复用

对于服用,不光是可以给别人服用,很多时候,就是因为抽象的好,因而可以使用到一些基础算法。复用代码的好处,就是不需要额外的维护啊。

算法设计,是应该高于业务设计的。这样才能体现算法的优势。否则石头一旦沉入大海,我们再也不能看清楚他们了。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1574387

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章