约定优于配置

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

本质是说,开发人员仅需规定应用中不符约定的部分。例如,如果模型中有个名为Sale的类,那么数据库中对应的表就会默认命名为sales。只有在偏离这一约定时,例如将该表命名为"products_sold",才需写有关这个名字的配置。

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

动机

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

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

使用

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

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

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

项目的目录结构展示了Maven所约定了源代码的位置,只需配置很少的信息就可以自动完成编译,测试和打包等工作。

参考文献

  1. 也译作惯例优于配置,惯例优先原则

  2. Coding by convention C2 Wiki (2009-09-01).

  3. Too Coding by convention C2 Wiki (2009-09-01). TooToo Coding by convention C2 Wiki (2009-09-01). Too
    Many Parameters. C2 Wiki, 1 September 2009. Retrieved from
    http://c2.com/cgi/wiki$?TooManyParameters[永久失效链接].

  4. Chapter 13.11 describes the application in the context of spring
    model/view/controller
    http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html

  5. http://rubyonrails.org/, advertises the paradigm right from ‘home’

  6. a description of configuration with the goal of convention http://grails.org/Unified+Configuration, and relationship to bean referencing from spring 存档副本. [2010-09-29]. (原始内容存档于2010-10-28).

  7. Sun (no date). JavaBeans specification, section 1.4. Retrieved from
    http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html.

  8. “As a general rule we don’t want to invent an enormous java.beans.everything class that people have to inherit from. Instead we’d like the JavaBeans runtimes to provide default behaviour for ‘normal’ objects, but to allow objects to override a given piece of default behaviour by inheriting from some specific java.beans.something interface.”

外部链接

  • Detailed information on CoC
  • Convention Over Configuration

参见

  • Ruby on Rails
  • KISS原则
  • 一次且仅一次

原文链接:

https://zh.wikipedia.org/wiki/约定优于配置

约定由于配置(Convention over Configuration)相关推荐

  1. SpringBoot约定大于配置的特性解读 SpringBoot快速入门

    SpringBoot约定大于配置 Spring官方网站本身使用Spring框架开发,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系.随着Spring 3.0的 ...

  2. Spring Boot(一) 自动装配--约定大于配置

    欢迎去我的个人博客--晓坞坐坐,里面有很多有趣的文章,不止是技术.www.lixiaodongisme.com 随着spring体系的发展,我们在开发时需要配置整合的东西也越来越多,在进行开发时,繁琐 ...

  3. Struts2 ActionWildcard(通配符配置)约定优于配置

    新建web project:struts2_0500_actionwildcard Build Path 项目图: src: StudentAction.java TeacherAction.java ...

  4. springboot约定优于配置的体现

    约定优于配置的体现主要是 1. maven的目录结构 a) 默认有resources文件夹存放配置文件 b) 默认打包方式为jar 2. spring-boot-starter-web中默认包含spr ...

  5. [SpringBoot2]容器功能_底层注解配置绑定_@Configuration@Import@Conditional@ImportResource

    @Configuration&@Bean 告诉SpringBoot这是一个配置类==配置文件 #############################Configuration使用示例### ...

  6. SpringMVC介绍之约定优于配置

    2019独角兽企业重金招聘Python工程师标准>>> SpringMVC介绍之约定优于配置 所谓的约定优于配置就是指在程序开发过程中我们约定好一些规则可以使我们更少的进行配置和代码 ...

  7. “约定优于配置”与Magento改造尝试四之block、helper和model载入

    暂定本章为这个系列最后一章,还是继续沿用模块的别名(alias)概念 <modules><Mage_Wishlist><version>1.6.0.0</ve ...

  8. Springboot 配置类( @Configuration) 不能使用@Value注解从application.propertyes中加载值以及Environment为null解决方案

    Springboot 配置类( @Configuration) 不能使用@Value注解从application.propertyes中加载值以及Environment为null解决方案 参考文章: ...

  9. SpringBoot约定大于配置理解

    约定大于配置是一种开发原则,就是减少人为的配置,直接用默认的配置就能获得我们想要的结果. SpringBoot的约定大于配置,按我的理解是:对比SpringMVC,需要在web.xml里面配置前端控制 ...

最新文章

  1. 2022-2028年中国塑胶模具行业市场专项调研及前瞻分析报告
  2. 中国团队在精液中发现新冠病毒,“蛋疼”且“不行”:新冠可能对男性威胁更大...
  3. 【英文文本分类实战】之二——数据集挑选与划分
  4. 为什么 CPU 访问硬盘很慢?
  5. c语言实现点在多边形内部,C语言中实现 点在多边形内 算法
  6. python construct 字符串_通过字符串变量在Python中设置和获取@property方法
  7. 数据结构与算法--两个链表中第一个公共节点
  8. (五)深入浅出TCPIP之TCP流量控制
  9. 散列表(算法导论笔记)
  10. Cocos2d-x 3.x如何通过WebSocket连接服务器进行数据传输
  11. 电脑重启bootmgr_解决电脑开机出现bootmgr is compressed的两大妙招
  12. mysql数据库数字类型_Mysql 数据库数值类型详解
  13. python表格对齐_python 格式化输出 列表对齐左对齐右对齐
  14. 【python快速入门】—唐宇迪课程笔记
  15. scjp java程序员_Sun认证Java程序员(SCJP)考试
  16. DHTMLX JS Gantt Library 7.1.13
  17. Python strip() 函数 去空格 \n \r \t 函数的用法
  18. 服务器 战地4 无限载入,战地4卡在loading界面无限载入怎么办
  19. 新篇章 每周分享第22期 (20180910~20180917)
  20. SXSSFWorkbook 表格内换行

热门文章

  1. JavaWeb-简易留言板制作【MVC】
  2. vulnhub-Momentum2
  3. 计算机水平模拟软件卸载不了怎么办,有的软件卸载不了怎么办
  4. 亚马逊、Facebook在印度遭遇的最大阻力竟是中国!
  5. java8新特性获取(当月,上月,下月)(第一天,最后一天)
  6. 金山快盘API的python版
  7. 记录一次nodejs爬取《17吉他》所有吉他谱
  8. 4K Video Downloader (4K超高清视频下载器)V6.1.46版本发布
  9. 错误:org.hibernate.exception.GenericJDBCException
  10. 【微信小程序】在组件中刷新页面