約定優(yōu)于配置(convention over configuration),也稱作按約定編程,是一種軟件設(shè)計范式,旨在減少軟件開發(fā)人員需做決定的數(shù)量,獲得簡單的好處,而又不失靈活性。
簡介本質(zhì)是說,開發(fā)人員僅需規(guī)定應(yīng)用中不符約定的部分。例如,如果模型中有個名為Sale的類,那么數(shù)據(jù)庫中對應(yīng)的表就會默認(rèn)命名為sales。只有在偏離這一約定時,例如將該表命名為"products_sold",才需寫有關(guān)這個名字的配置。
如果您所用工具的約定與你的期待相符,便可省去配置;反之,你可以配置來達(dá)到你所期待的方式。1
動機(jī)設(shè)計不好的框架通常需要多個配置文件,每一個都有許多設(shè)置。這些配置文件為每一個項(xiàng)目提供信息說明從URL到將類映射到數(shù)據(jù)庫表的各種信息。大量包含太多參數(shù)的配置文件通常是過度復(fù)雜的應(yīng)用設(shè)計的指標(biāo)(代碼壞味道)
例如,在知名的Java對象關(guān)系映射框架Hibernate的早期版本中,將類及其屬性映射到數(shù)據(jù)庫上需要是在XML文件中的描述,其中大部分信息都應(yīng)能夠按照約定得到,如將類映射到同名的數(shù)據(jù)庫表,將屬性分別映射到表上的字段。后續(xù)的版本拋棄了XML配置文件,而是使用這些恰當(dāng)?shù)募s定,對于不符合這些約定的情形,可以使用Java 標(biāo)注來說明(參見下面提供的JavaBeans規(guī)范)。2
使用許多新的框架使用了約定優(yōu)于配置的方法,包括:Spring,Ruby on Rails,Kohana PHP,Grails,Grok,Zend Framework,CakePHP,symfony,Maven,ASP.NET MVC,Web2py(MVC),Apache Wicket。
這是一個古老的概念, 甚至在Java類庫中也可以找出這一概念的蹤跡。例如,JavaBean規(guī)范非常多的依賴這一概念。下面摘錄JavaBeans 1.1版規(guī)范的一段:
按照一般的規(guī)則,我們不希望造出一個奇怪的java.beans.everything類,其他類需要從該類派生。而是希望在運(yùn)行時JavaBeans為一般的對象提供缺省的行為特征,但是允許對象通過繼承特定的java.beans.something接口來覆蓋缺省的行為特征的一部分。2
Java注解Java注解又稱Java標(biāo)注,是Java語言5.0版本開始支持加入源代碼的特殊語法元數(shù)據(jù)。
Java語言中的類、方法、變量、參數(shù)和包等都可以被標(biāo)注。和Javadoc不同,Java標(biāo)注可以通過反射獲取標(biāo)注內(nèi)容。在編譯器生成類文件時,標(biāo)注可以被嵌入到字節(jié)碼中。Java虛擬機(jī)可以保留標(biāo)注內(nèi)容,在運(yùn)行時可以獲取到標(biāo)注內(nèi)容。 當(dāng)然它也支持自定義Java標(biāo)注。2
本詞條內(nèi)容貢獻(xiàn)者為:
王沛 - 副教授、副研究員 - 中國科學(xué)院工程熱物理研究所