【进阶编程】“约定优于配置” 软件设计原则

“约定优于配置”Convention Over Configuration)是一种软件设计原则,它的核心理念是通过合理的默认约定减少开发人员需要编写的配置代码,从而提高开发效率、减少人为错误和复杂度。也许你不知道,但是在软件编程中你或多或少都会用到这一设计原则。

主要思想:

  • 默认行为:系统提供合理的默认约定,开发人员只需关注特殊情况,减少重复的配置工作。
  • 减少配置:通过使用约定,开发人员无需显式地配置常见任务,只有在默认约定不适用时才需要显式配置。
  • 提高开发效率:减少配置代码,让开发人员专注于实现业务逻辑,而不是处理配置文件或手动设置各项细节。

约定优于配置的典型场景

1.Web 框架中的应用

以 ASP.NET Core、Rails、Spring 等现代 Web 框架为例,它们都广泛应用了“约定优于配置”的原则。

  • ASP.NET Core:控制器类通常不需要显式地配置路由。ASP.NET Core 中约定 URL 路由与控制器、方法名称相关联。例如,/Home/Index 默认对应 HomeController 的 Index 方法,开发人员可以通过重写约定来定义自定义路由,但默认情况下不需要。
  • Rails:Rails 框架通过“约定优于配置”大幅简化了开发。例如,模型类 Article 默认映射到数据库表 articles,并且框架会根据类名自动推断表名,开发者不需要手动配置映射。

2.ORM(对象关系映射)

在对象关系映射(ORM)框架中,约定优于配置的应用非常常见。例如,Entity Framework 和 Hibernate 都广泛使用了这一原则。

  • Entity Framework:默认情况下,模型类 Customer 将映射到数据库中的 Customers 表,属性 CustomerId 会被约定为主键字段。开发人员只需要在约定之外做额外配置,例如在需要自定义主键或字段名称时。

3.文件和目录结构

很多框架通过对目录结构的约定来减少配置。例如:

  • Rails:约定了 MVC(模型-视图-控制器)的目录结构,app/models 存放模型类,app/controllers 存放控制器类,app/views 存放视图文件。开发人员只需按照这种约定的目录结构组织代码,框架就能自动识别相应的文件,无需额外配置。

4.依赖注入(Dependency Injection)

一些依赖注入框架也遵循“约定优于配置”的原则。

  • ASP.NET Core DI:如果一个类的构造函数有依赖,框架会按照约定通过依赖注入将它们自动注入,无需手动注册。如果有多个实现,则需要手动配置注册依赖关系。

约定优于配置的好处

  1. 减少配置文件的复杂性:开发人员不必定义大量的 XML 或 JSON 配置文件,框架默认的约定行为可以满足大部分需求。
  2. 提高开发速度:开发者可以专注于业务逻辑,默认的约定让开发变得更加流畅。
  3. 降低错误率:通过减少手动配置,降低了配置文件出错的概率。
  4. 便于团队协作:约定统一了项目结构和编码方式,减少了团队成员之间的分歧,提升协作效率。

适用场景

  • 常见开发任务:在那些常见的开发任务中,很多需求是可以抽象出通用约定的,遵循这些约定就能减少重复配置。
  • 具有特定约定的框架:例如 ASP.NET Core、Spring、Rails 这样的框架,约定优于配置原则可以让这些框架简化开发。

约定优于配置的局限性

  • 灵活性降低:约定固然减少了配置的负担,但在某些复杂的场景中,过于强制的约定可能限制开发者的灵活性。框架应当提供合理的方式让开发者能够轻松地突破这些约定进行自定义配置。
  • 学习成本:开发人员必须熟悉框架的默认约定。对于不熟悉约定的开发者,可能需要时间去适应和理解这些隐式的行为。

示例代码:ASP.NET Core 中的默认路由约定

public class HomeController : Controller
{
    // 根据约定,URL /Home/Index 将自动映射到这个动作方法
    public IActionResult Index()
    {
        return View();
    }

    // URL /Home/About 将映射到这个动作方法
    public IActionResult About()
    {
        return View();
    }
}

在这个 ASP.NET Core 示例中,框架按照“约定优于配置”的原则,不需要显式地为 HomeController 的 Index 和 About 方法配置路由。框架会自动将 /Home/Index 映射到 Index 方法, /Home/About 映射到 About 方法。

总结

约定优于配置是一种通过合理的默认行为减少配置的设计原则。它通过简化配置、提高开发效率和代码可读性,广泛应用于现代开发框架和工具中。虽然可能在某些情况下略微降低了灵活性,但它大大简化了开发工作,是软件设计中的重要原则之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

de之梦-御风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值