什么是约定大于配置
约定大于配置是一种软件设计思想,指的是在系统中,规定一些默认约定在某些情况下优先于应用程序中的配置。这种设计思想可以减少应用程序中的配置,简化代码,提高开发效率和运行速度。约定大于配置常见于一些主流框架、库、工具等中,如Ruby on Rails、Spring等。本文会详细阐述约定大于配置的概念、优点和缺点,以及约定大于配置在软件设计中的应用。
1. 概念
约定大于配置是一种遵循默认约定的设计思想,意味着默认约定优先于应用程序中的配置。约定大于配置的思想可以减少配置,增强应用程序的灵活性和易用性。下面将详细阐述约定大于配置的概念。
1.1 约定优于配置
约定大于配置的核心概念是“约定优于配置”。这种设计思想强调了默认约定的重要性。开发人员可以通过某些固定的约定,来避免一些重复性工作,减少配置工作量,提高开发效率。比如在MVC模式中,约定了View和Controller的对应关系,使得框架中很多功能可以自动化生成,减少了程序员的工作量。
1.2 框架中的约定大于配置
约定大于配置常见于框架中。框架是一种通用的、可重用的代码库,它提供了一些已经实现的功能,使得开发人员可以更加专注于业务逻辑本身,而不必关心这些功能的实现细节。框架通常会内置一些默认约定,使得开发人员可以通过简单的配置,快速地创建一个应用程序。比如在Ruby on Rails框架中,约定了不同目录中的文件和类的对应关系。只需要按照默认约定编写代码,就可以自动获得很多信息。
2. 优点
约定大于配置的设计思想具有以下几个优点。
2.1 减少编码量
约定大于配置能够通过默认约定减少编码量,比如在MVC模式中,约定了View和Controller的对应关系,避免了需要重复手动编写对应关系。这样不仅可以减少开发工作量,还能够避免由疏忽带来的bug。
2.2 简化配置
在使用约定大于配置的框架中,可以避免针对每个应用程序进行复杂的配置,框架提供了预设的默认配置,根据默认配置开发人员可以快速创建出令人满意的应用程序,进而更好地专注于具体业务。这样使配置变得更加简单,减少了开发者的时间和精力成本。
2.3 提高可重用性
约定大于配置依赖于默认约定,使得框架中的组件可以共享同样的约定。这样,一些习惯性的配置信息不再需要重复编写,可以直接按照约定写入文件,这样一些组件或库就能更加完美地适配框架中默认的约定。
2.4 规范化应用程序
约定大于配置使得框架中预定义的约定能够统一应用于许多应用程序中,统一了应用程序的结构和规范。开发者能够遵循规范快速编写并启动应用程序,也可以方便地将这些规范告知团队里的其他人员,更好地提升项目的可读性和可维护性。
3. 缺点
约定大于配置或许有以下缺点。
3.1 难以调试
如果某些约定不能正常工作,则可能需要深入了解框架中的默认约定并进行初步调试或修改约定,这会浪费一些时间,可能会延长解决问题的时间周期。
3.2 学习成本高
在一些约定较复杂的框架中,学习成本可能会很高,相关的约定配置相关的技术文档不一定及时更新,或者是硬性规定的,对开发者来说较为不友好。
3.3 自由度受限
无论何时使用约定大于配置设计风格,均需要依赖框架提供的约定,开发者可能无法做自定义修改,或者作出个性化变动。
4. 应用实例
约定大于配置广泛应用于各类开发框架和编程语言中。其中比较典型的如Ruby on Rails框架、Spring框架。此外,还有很多免费开源的项目组件库也采用此思想设计。下面简单介绍几个实例。
4.1 Ruby on Rails
Ruby on Rails 是一款基于 Ruby 语言的开源框架,用于快速创建 web 应用程序。Ruby on Rails 框架大量采用了约定优于配置的设计思路,依靠内置的默认约定来组织代码和配置,从而实现简化开发,提高效率。
4.2 Spring
Spring 是一款基于Java的开源框架,包含了很多应用级别的服务和基础设施代码。Spring 的约定大于配置思想强调通过默认约定来避免配置,比如 Spring MVC 中, DispatcherServlet 会将所有以.jsp结尾的uri请求分发到视图解析器展示出来。
5. 总结
约定大于配置是一种重要的软件设计思想,不仅能够大大提高开发效率,而且能够简化代码,降低维护成本。当然,使用约定大于配置需要根据具体的系统和需求进行取舍。在一定的前提下,约定大于配置可以成为一种优秀的实现方法。
