我们经常会接触到规范(specification)、 、模式(pattern)、框架(framework)等概念。有时与朋友沟通时,总感觉对方混淆了这些概念的使用范畴,也就是将某个概念的东西硬往另一个概念上套。
在此,我讲讲自己的看法,期待各位的拍砖:
规范(specification)几乎和标准同义,是一类实现的实现标准。也就说为了统一某类实现的某些特性,而制定规范,使这类的实现互相之间具有可替代性,也决定了依赖该类实现的软件构件使用该类实现的方式。例如:servlet api、osgi、osgi blueprint、jpa、jdbc、jta、jndi等等就属于规范。
模式(pattern)则是为实现某方面的功能而总结出来的一些经验的集合。与规范相比较,它不需具有可替代性,所以约束性较弱,有点类似于指导方针性质的东西。除了我们常说的各种java设计模式外,我觉得象mvc、orm、ioc,甚至OO,都是模式范畴内的。在一定条件下,模式可能向规范发展,例如:orm和jpa的关系。
框架(framework)则是规范和模式的具体实现。有些框架是规范的实现,有些框架是模式的实现。例如:osgi framework是osgi规范的实现,具体有equinox、felix等。而mvc模式的实现有struts2、springmvc等等。 规范的实现和模式的实现的区别在于可替代性。例如我们用struts2开发的应用,就不能将struts2框架直接替换成springmvc框架后直接运行。而我们开发的osgi应用却可以分别在equinox或felix上运行(如果不可以的话,你就该看看你的osgi应用是否符合osgi规范了)。
在此,我讲讲自己的看法,期待各位的拍砖:
规范(specification)几乎和标准同义,是一类实现的实现标准。也就说为了统一某类实现的某些特性,而制定规范,使这类的实现互相之间具有可替代性,也决定了依赖该类实现的软件构件使用该类实现的方式。例如:servlet api、osgi、osgi blueprint、jpa、jdbc、jta、jndi等等就属于规范。
模式(pattern)则是为实现某方面的功能而总结出来的一些经验的集合。与规范相比较,它不需具有可替代性,所以约束性较弱,有点类似于指导方针性质的东西。除了我们常说的各种java设计模式外,我觉得象mvc、orm、ioc,甚至OO,都是模式范畴内的。在一定条件下,模式可能向规范发展,例如:orm和jpa的关系。
框架(framework)则是规范和模式的具体实现。有些框架是规范的实现,有些框架是模式的实现。例如:osgi framework是osgi规范的实现,具体有equinox、felix等。而mvc模式的实现有struts2、springmvc等等。 规范的实现和模式的实现的区别在于可替代性。例如我们用struts2开发的应用,就不能将struts2框架直接替换成springmvc框架后直接运行。而我们开发的osgi应用却可以分别在equinox或felix上运行(如果不可以的话,你就该看看你的osgi应用是否符合osgi规范了)。