约定优于配置

总结了三位博客大神的文章,希望大家对约定优于配置有更好的理解吧。

一.规范

约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。

若您所用的工具的约定与您期待相符,便可省去配置;反之,你可以通过配置来达到你所期待的方式。

 

设计不好的框架通常需要多个配置文件,每一个都有许多设置。这些配置文件为每一个项目提供信息说明从URL到将类映射到数据库表的各种信息。大量包含太多参数的配置文件通常是过度复杂的应用设计的指标(代码坏味道)。

 

动机

 

例如,在知名的Java对象关系映射框架Hibernate的早期版本中,将类及其属性映射到数据库上需要是在XML文件中的描述,其中大部分信息都应能够按照约定得到,如将类映射到同名的数据库表,将属性分别映射到表上的字段。后续的版本抛弃了XML配置文件,而是使用这些恰当的约定,对于不符合这些约定的情形,可以使用Java 标注来说明(参见下面提供的JavaBeans规范)。

 

使用

 

 

许多新的框架使用了约定优于配置的方法,包括:Spring,Ruby on Rails,Kohana PHP,Grails,Grok,Zend Framework,CakePHP,symfony,Maven,ASP.NET MVC,Web2py(MVC),Apache Wicket。

这是一个古老的概念, 甚至在Java类库中也可以找出这一概念的踪迹。例如,JavaBean规范非常多的依赖这一概念。下面摘录JavaBeans 1.1版规范的一段:

按照一般的规则,我们不希望造出一个奇怪的java.beans.everything类,其他类需要从该类派生。而是希望在运行时JavaBeans为一般的对象提供缺省的行为特征,但是允许对象通过继承特定的java.beans.something接口来覆盖缺省的行为特征的一部分。

Maven约定的项目结构如下图:
约定优于配置_第1张图片

二.规范

Maven仅仅简单几行pom依赖可以完成过去大量配置文件才能完成的任务。

想象一下,如果我们每个人都满足于自己的私欲,为所欲为,我们的世界会乱成什么样子?在软件世界里,如果每个程序员都定义一套自己的规范,那么我们的软件会乱成什么样子?各个版本的浏览器就已经让众多程序员头痛不已了,更别提其他的了。想到这,你有没有感觉,其实java的成功,xml的成功,maven的成功都有其必然性,他们的设计理念都包含一个很简单但很深刻的道理,那就是“通用”。

为什么通用,因为遵守约定

通用又会带来另一个好处,那就是学习成本低,当新人加入的时候,很容易上手,主要他了解约定,或者说规范就可以了。对比一下相同项目的ant脚本和maven脚本,也就是build.xml和pom.xml,你就会明白,我为什么说学习成本低了。如果没有约定,没有构建标准,n个项目可以能就要有n中项目目录结构,n种构建方式。

如果你有一种“强迫症”,发现程序员多少都有点强迫症,哈哈,就是不愿意遵循约定怎么办?我只能再写几句来试图说服你。你真的需要那么做吗?你真的需要那么个性吗?个性意味着什么?没有通用性。没有通用性意味着什么?死亡。你可能还会质疑,微软的很多东西都没有通用性,只能运行于windows平台,照样活得好好的。但你有没有想过全球那么多windows用户,windows的通用性是不可质疑的,间接使运行在它之上的软件拥有了一定的通用性。如果你还要再举苹果,好吧,朋友,你极端了。个性意味着复杂,没有人喜欢复杂的东西。

总结一下,遵守约定虽然损失了一定灵活性,但可以减少配置,降低复杂性,减少学习成本,使程序更优美。

三.规范

一流的公司定义规范。二流的公司实现规范。三流的公司精通实现。四流的公司会用实现。

简单来说符合人类习惯,符合大多数人的习惯的约定就是一种好约定,能够简化咱程序员写的代码的约定就是好约定,能够使写出的代码可重用,可扩展的约定就是十分恰当的约定。

我们都知道IIS,JBoss,tomcat都能够发布我们的网站。为什么离开了他们我们就不可以发布网站了呢。首先发布网站,别人访问你的网站,这肯定涉及了计算机网络的相关知识吧。虽然这些东西都是由硬件自动来完成了,但是这些服务器应用程序肯定有它的一套规则。像J2EE的13个规范,IIS的ISAPI,处理程序映射。帮程序员完成了大量的工作。小编我就觉得其实我们一直在使用这些实现。当然了还有很多各种各样的框架,其实他们也是自动帮助我们完成了很多工作。

     约定,学习编程似乎就是在学习约定,其实不是这样的,小编又有了新的念头了,我们其实在使用别人的实现,比如:我们都知道tomcat实现了J2EE的jsp,servlet规范。tomcat不是J2EE的规范内容,他实现了J2EE的规范。我们就可以使用tomcat来进行JSP网页的开发。要不然为什么tomcat不启动,咱们的JSP页就打不开呢?从这方面说似乎距离约定又远了。那么作为程序员又应该怎么去做呢。

    小编认为作为程序员肯定要敲代码的啊,不过敲的过程也应该多多思考,总结出一套针对服务器的一些约定,然后按照这些约定去实现我们的业务流程,根据这些约定和业务流程,再制定我们的开发规范。可以这么说,我们的实现部分是在金字塔的最低层的。我们也得向上走不是,那么我们就得清楚的理解,这些规范了。

 

 

 

你可能感兴趣的:(compute,base)