什么是“按约定编码”?

Posted

技术标签:

【中文标题】什么是“按约定编码”?【英文标题】:What is "coding by convention"? 【发布时间】:2010-10-28 11:04:08 【问题描述】:

我一直在查看 Grails 上的 Groovy,并注意到底部有一行:

Grails 旨在将“按惯例编码”范式引入 Groovy。

究竟什么是约定俗成的编码?

【问题讨论】:

【参考方案1】:

Convention over Configuration(又名 Coding by Convention)是一种软件设计范式,旨在减少开发人员需要做出的决策数量,获得简单性,但不一定失去灵活性。

这句话本质上意味着开发人员只需要指定应用程序的非常规方面。例如,如果模型中有一个类Sale,则数据库中对应的表默认称为sales。只有当人们偏离这一约定时,例如调用表“products_sold”,才需要编写有关这些名称的代码。

当您使用的工具实现的约定与您期望的行为相匹配时,您无需编写配置文件即可享受好处。当您想要的行为偏离实现的约定时,您可以配置您想要的行为。

来自"Convention over configuration" article on Wikipedia。

【讨论】:

现在的***文章并不是一个很好的例子。应该考虑这里的其他答案。【参考方案2】:

在 Grails 的上下文中,“按约定编码”意味着大量(乏味和重复的)显式代码和/或配置被简单的命名和目录结构约定所取代。例如:

在 grails-app/controllers 目录中名称以 Controller 结尾的任何类都会自动成为 Spring 控制器,并且其中定义的闭包将绑定到 URL - 您不必像以前那样在 XML 文件中进行配置使用纯 Spring 时。 taglibs(grails-app/taglib 目录)也是如此 - 不再需要繁琐的 TLD 文件! grails-app/domain 中的域类可能具有最“约定俗成的魔力”,它会自动映射到自动生成的 DB 模式 - 按照约定,DB 表和列名称与域属性名称相同。

【讨论】:

【参考方案3】:

按约定编码与按配置编码: 您对东西有一定的放置或命名约定的想法,因此您不必明确告诉程序东西在哪里或叫什么。 例如,在 ASP.Net MVC 中,对于视图的存储位置和调用方式有一个约定。这意味着当您的代码指示服务器返回视图时,运行时将在某些文件夹中查找具有特定命名结构的视图。请参阅this pdf 中的第 20 页了解更多信息。

另一个例子是方法的命名约定。例如,在事件驱动的语言中,您可以选择显式声明哪个方法处理哪些事件,或者您可以依赖命名约定 - 例如 ..._OnOpen 或 ...OnClick,然后依赖运行时来确定调用给定事件的正确方法。

【讨论】:

【参考方案4】:

这里有很多约定:

    如何命名 html 元素,以便它们可以作为 HTTP 请求的参数轻松访问; 如何将对象属性与数据库中的表名和列名相关联; 如何将项目安排到目录/包中;

当您发现自己以特定方式解决常见问题时,您就会这样做。您会注意到相似之处并将它们编入一些自动化方案中。

【讨论】:

【参考方案5】:

见Convention over Configuration。这是设计工具或框架以将最常见的配置选项作为默认值的概念,因此对于绝大多数用户而言,不需要配置。

【讨论】:

现在的***文章并不是一个很好的例子。应该考虑这里的其他答案。【参考方案6】:

这意味着,如果您遵守所使用的任何基于约定的框架所定义的某些编码约定,您将免费获得许多功能。换句话说,如果你按照框架的预期来构建你的应用程序,可以节省很多工作。

查看按惯例编码的优缺点是个好主意。

【讨论】:

你的回答太抽象,没有例子。它只是重申其他人所说的话。

以上是关于什么是“按约定编码”?的主要内容,如果未能解决你的问题,请参考以下文章

什么是 Spring Boot 版本控制约定?

RESTful API 设计约定

标签、函数的命名约定

域对象与其关系表的良好命名约定是啥?

DAO 方法的标准命名约定

SpringBoot脚手架项目002-005.Spring 约定编程Spring AOP