该篇探讨代码复用。
一开始学编程时:
1
2
3
func main() {
fmt.Println("Hello, World!")
}
代码集中一起。
函数块(副本式copy)
后来代码多了,开始用函数块:
1
2
3
4
5
6
7
func sayHello(){
fmt.Println("Hello, World!")
}
func main() {
sayHello()
}
这时,其实已经开始复用代码了。
函数块(简单模板——参数)
上下文隔绝且没有参数的函数块,如:
1
2
3
func sayHello(){
fmt.Println("Hello, World!")
}
是一个副本(copy)。
有时,我们想要更灵活地复用代码,像填模板似的。于是,带参数的函数出现了。
1
2
3
func sayHello(name string){
fmt.Println("Hello,"+name)
}
模板块
后来,出现了需要模板的需求,就出现了二维角度的需求,编程世界常见的有XML、Java类、关系数据库。这种复用是通过设计「模板」,通过导入数据从而达到复用的二维效果。
模板复用
颗粒度到了模板之后,人们就思考着如何复用模板。模板的复用即,旧模板依赖新的模板。
现今有两种模式:
- Java、xml为首的静态模板。他们一旦定义下来旧不许被修改。(适合大工程)
- JavaScript的原型继承。模板在代码运行中可被修改。(较灵活)
构造模型(设计方案)
之前的复用是建立于普通数据的前提下,可以随意地输入(编程语言层次)。之后的复用中使用的数据,从普通数据变成了代码,这种复用俗成设计模式。
该层次不再是编程语言层次,所以不存在官方用法,因此出现了各种各样的方案和模型。这一层次的复用,需要更多的理解和经验。
总结
复用层次越高,灵活性就越低,需理解的内容就更多。