title: 关于代码复用
tags:
  - 整理总结
categories: 1.编程
date: 2016-04-04 13:41:34
---

关于代码复用的一些整理总结，很简单，但是平常不会细想吧。

代码复用是有两个方向的，
一种是对相对下层的具体的操作的复用，从实现出发，例如各种语言的工具类库、GUI编程中的界面组件等等；另一种则是对上层抽象的操作逻辑的复用，从需求出发，面向抽象（接口）编程、设计模式、框架，例如MVC分层架构思想、各种用来写Web应用的框架等等。

相对来说下层复用更容易，上层复用只在特定的操作逻辑不变的情形下比较可行，比如Web框架，容易抽象出完整的流程（即需要实现的操作逻辑）；或者是代码组织层面上的设计模式、软件架构经验；而在要按照“具体需求”来设计操作逻辑的情形下相对难实现，因为很难合适的界定“具体需求”中操作逻辑不变部分的层次。

一些启发意义：
造“框架轮子”（尤其是对应某个具体需求的）得靠“重构”从实际应用中抽离出来（除非对具体需求十分熟悉和明确），当然初始阶段一些基础的框架和架构设计肯定是要的；而设计或者抽取工具类库的方法时要符合单一功能性，不要妄图包含上层的需求处理的逻辑。
更广义的，任何软件都可以从这两个方向来看待，提供基础功能的软件和提供抽象流程的软件（也有两者合一的，因为平常没有这个概念所以都是模糊的）。例如多媒体播放器、图片浏览器、压缩工具、Photoshop、数据库软件、编辑器等等就算第一种，而博客、论坛、微博、GTD或者清单管理软件、记账软件、IDE等等大致就算是第二种类型了。当然，这种软件分类只是泛泛之谈，切莫较真吧(^_^)