韩小明@xiammy的专栏

没水的地方挖井,有水的地方修渠

韩小明ID:xiammy
439370次访问,排名106好友13人,关注者67
毕业后一直在广联达工作
xiammy的文章
原创 174 篇
翻译 0 篇
转载 22 篇
评论 1133 篇
韩小明的公告
作者毕业于浙江大学,非常热爱体育运动。现在尤其热爱羽毛球运动。在休息时间非常热爱技术文章写作。
最近垃圾评论泛滥,为了不污染大家的视听,暂时关闭评论,请大家理解。
欢迎转载,但请注意,除非特别声明,本站采用Creative Commons License许可:署名,非商业。

最近评论
yb00k:感觉 这个还是个垃圾东西 适合IE7的变到IE8 就变样了 点都不规范 一点兼容性都不强....强烈支持 firefox
wuhuiran:我嵌入式数据库一直用BerkeleyDB,看到你的博文才知道还有一个SQLite,谢谢。BerkeleyDB不支持SQL
wuhuiran:我嵌入式数据库一直用BerkeleyDB,看到你的博文才知道还有一个SQLite,谢谢。BerkeleyDB不支持SQL
liquankun:瑞星还是不咋地!
白花了几个月的钱
外国的杀软不一定比国产的好!
但是国产的就是比不上国外的!
没办法!技术赶不上人家 还竟搞内讧
不经历大灾难 就不知道什么是团结!



正真的高手是不用杀毒软件的,没什么好不好的,是你自己技术不行而已
wangdei:http://www.bt285.cn BT下载 有300W部BT种子.
http://www.yaonba.com.cn NBA中文网 有200W条NBA直播
http://www.5a520.cn 小说520网 有300W部小说
http://www.bt285.cn/yazhou/ 亚洲BT 有BT亚洲
http://www.bjxlz.cn p……
文章分类
收藏
    相册
    图书
    链接
    宗刚的专栏(RSS)
    快乐学习(RSS)
    陈亮亮的专栏(RSS)
    朋友
    张恂论 OO
    言之有李(RSS)
    赵伟的小家
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 算法设计应该依赖抽象而不是业务收藏

    新一篇: 老书推荐:架构师应该关注的技术之外的东西 | 旧一篇: 一起来提升网络言论的道德素养

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

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

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

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

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

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

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

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

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

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

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

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

    发表于 @ 2007年04月22日 10:54:00|评论(loading...)|编辑

    新一篇: 老书推荐:架构师应该关注的技术之外的东西 | 旧一篇: 一起来提升网络言论的道德素养

    评论

    #aoshan 发表于2007-04-23 12:24:18  IP: 221.130.45.*
    有收获!谢谢高手分享!
    #appgqp 发表于2007-04-24 15:41:02  IP: 218.1.115.*
    感谢分享,提问一句
    "算法设计,是应该高于业务设计的。这样才能体现算法的优势。否则石头一旦沉入大海,我们再也不能看清楚他们了。"

    就好象做房子一样,我们是否需要做到对每一颗钉子的所在有完备的了解呢?
    轮胎坏了,找到砂眼补胎固然非常好,但是工业化的处理是直接换新轮胎为佳
    #Antihero 发表于2007-04-24 17:46:36  IP: 192.160.11.*
    嗯,有道理,特别是对于大型的软件开发来说,更应该体现这样的思想。
    #xiammy 发表于2007-04-24 19:45:56  IP: 221.221.6.*
    to appgqp:你说的问题,开上去是一个权衡的问题,权衡什么地方需要设计,社名地方不需要设计。
    但是,做过你是一个好的架构师的话,你应该让你的设计思想(比如基于接口设计算法)传承下去,让后来人在设计的时候,不至于偏离。
    好的架构就像搭了一个好的框架,后来人可以在这个框架基础上,自然不自然地构建出你需要的设计出来。
    #xiammy 发表于2007-04-24 19:46:49  IP: 221.221.6.*
    修正:开上去-> 看上去
    做过你是->如果你是
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 韩小明